2010-12-01 14 views
0

私のページに#addと#itemsという2つのテーブルがあります。 #addには1行の入力があります。 #it​​emsには複数の行があります。私は入力をデータベースに保存しています。 #addはボタンをクリックするだけで保存されるはずですが、#itemsはぼかしを保存します。他のIDを含むIDによるjQueryセレクターの問題

問題は#add入力がぼかしでも保存しようとしていることです。以下で使用しているセレクタは、#addテーブル入力と#itemsテーブル入力を処理しています。ここで

は、(必要であれば、私はソースファイルにリンクすることができます)コードのサンプルです:

$("#items tbody tr td input:not('[name=\"ext\"]')").live('focus',function() { 
    $(this).attr("readonly",false); 
    $(this).select(); 
    curEdit = $(this).val(); 
    var name = $(this).attr('name'); 
    if (name == 'item') { 
     $(this).alphanumeric(); 
    } else if (name == 'tag') { 
     $(this).alphanumeric({allow:" "}); 
    } else if (name == 'desc') { 
     $(this).alphanumeric({allow:".,-()/ "}); 
    } else if (name == 'qty') { 
     $(this).numeric(); 
    } else if (name == 'cost' || name == 'list' || name == 'disc' || name == 'unit' || name == 'ext') { 
     $(this).numeric({allow:"."}); 
    } 
}).live('blur',function() { 
    $(this).attr("readonly",true); 
    if (curEdit != $(this).val()) { // only update on changes 
     var col = $(this).parent().prevAll().length; 
     var query = "action=edit&id="+$(this).parents('tr').attr('rel'); 
     if (col == 1 || col == 10) { $(this).val($(this).val().toUpperCase()); } // format ITEM and GSA 
     if (col > 4 && col < 10) { $(this).val(formatCurrency($(this).val())); } // format COST, LIST, DISC, UNIT, and EXTENDED 
     if (col == 3) { $(this).val(ucEach($(this).val())); } 
     if (col > 3 && col < 10 && col != 5) { 
      var qty = $(this).parents('tr').find("[name='qty']").val(); 
      var list = $(this).parents('tr').find("[name='list']").val(); 
      var disc = $(this).parents('tr').find("[name='disc']").val(); 
      if ($(this).attr('name') != "unit") { 
       var unit = formatCurrency(list * (1-(disc/100))); 
       $(this).parents('tr').find("[name='unit']").val(unit); 
      } else { 
       disc = formatCurrency(((list - $(this).val())/list)*100); 
       $(this).parents('tr').find("[name='disc']").val(disc); 
      } 
      unit = $(this).parents('tr').find("[name='unit']").val(); 
      var ext = formatCurrency(qty * unit); 
      $(this).parents('tr').find("[name='ext']").val(ext); 
      query = query + "&field[]=qty&val[]="+qty+"&field[]=list&val[]="+list+"&field[]=unit&val[]="+unit+"&field[]=disc&val[]="+disc+"&field[]=ext&val[]="+ext; 
     } else { 
      query = query + "&field="+$(this).attr('name')+"&val="+$(this).val(); 
     } 

     $.post("itemsdb.php", query, function(data) { 
      if (data.res == "fail") { 
       alert("There was a problem saving this item."+data.error); 
      } 
     },"json"); 
    } 
}); 
+0

あなたのhtmlを見ないと言うのは難しいです。 –

+0

あなたのテーブルはID#テーブル#itemsのサブテーブルを追加していますか?また、ID #itemsの別のカプセル化要素がある可能性はありますか? – Keith

答えて

1

あなたのセレクタが正しくない要素を拾うかもしれないようですね。お使いのブラウザのJavaScriptコンソールであなたのセレクタを実行してみてください:

$("#items tbody tr td input:not('[name=\"ext\"]')") 

その後、返されたオブジェクト(複数可)を調べると、彼らはあなたが一致しようとしているものと一致していることを確認します。

+0

私はfirebugにセレクタを置き、それがテーブルparent divのすべてを含んでいたことに気づいた。これと上記のKeithのコメントの間に、私は親のdivも#itemsであることに気付きました。私はそれを逃したとは信じられません。すべての助けに感謝します。 – Greg

+0

喜んで助けてください!問題を解決した答えの横にある緑色のチェックマークをクリックしてください。スタックオーバーフローへようこそ! – ChessWhiz

関連する問題