0

これは私の最初の投稿なので、ルールに違反していないことを願っています。私はかなり広範囲に検索しましたが、解決しようとしている正しい用語を検索していない可能性があります。

とにかく、私の問題はこれです:アイテムのリストで生成されたテーブルがあります。クリックすると、左端の列にボタンがあり、ajax Postまたはload関数を呼び出して、アイテムの履歴を照会し、その下にリストします。テーブル。これは期待される結果の本当の意味で機能しますが、FireBugを介してコンソールを確認すると、リスト内のボタンをクリックすると投稿が2倍になります。すなわち。1回目のクリックで1つのコンソールイベントが表示され、2回目のクリックで2つのコンソールイベントが表示され、3回目のクリックで4つのコンソールイベントが表示されます。これは、別の場所を選択してカウントがリセットされるまで続きます。

以下は私がコンソールに見るものです。これは、後続の各投稿に時間がかかるため、タイミングに問題があります。

履歴タグボタンをクリックする5365

>GET http://localhost/digipens/query.php?rec_id=5365

履歴タグボタンをクリックする5365

>GET http://localhost/digipens/query.php?rec_id=5365

履歴タグボタンをクリックする5365

>GET http://localhost/digipens/query.php?rec_id=5365

履歴タグボタンをクリックする5365

>GET http://localhost/digipens/query.php?rec_id=5365

コード:

$('.hist-tag').click(function(){

  var ID=$(this).closest('tr').attr('id')

  itemid  = $("#itemid_input_"+ID).val();
  dataString = '?rec_id='+ID;

  $('#item_hist').load('query.php' + dataString); 

});

同じ目標を達成するためのアイデアやさまざまな方法は素晴らしいでしょう。

ありがとう!

4

2 に答える 2

1

クリックの結果としてクリックハンドラーを追加しているように聞こえます。$('.hist-tag').click()テーブルが更新された後に電話をかけますか?その場合、毎回新しいクリックハンドラーを追加します。つまり、クリックは2回、次に4回、次に8回というように処理されます。

ここに関連するコードが表示されていないため、推測することしかできません。

その場合、正しい解決策は、クリックハンドラーを一度だけ追加し、.on()呼び出しを介して追加することです。このようにして、クリックは現在および将来の要素に対して処理されます。

$('#mytable').on('click', '.hist-tag', function(){
    var ID=$(this).closest('tr').attr('id');
    itemid=$("#itemid_input_"+ID).val();
    dataString = '?rec_id='+ID;
    $('#item_hist').load('query.php' + dataString);
});

これにより、常に存在することがわかっている要素#mytable、またはテーブルのIDが何であれ、ハンドラーがアタッチされ、テーブルに伝播する子のクリックを監視し、指定したセレクターでそれらをフィルター処理します.hist-tag

繰り返しますが、私は推測していますが、それは私が持っている証拠から起こっているように見えます。

于 2012-09-26T19:22:56.457 に答える
0

あなたのクリックイベントは、リターンのたびに何らかの形でリバウンドされていると思います。
おそらく、同じスクリプトがロード呼び出しからの応答に含まれていますか?

これを試して:

$('.hist-tag').off('click');
$('.hist-tag').on('click', function(){
    var ID=$(this).closest('tr').attr('id');
    itemid=$("#itemid_input_"+ID).val();
    dataString = '?rec_id='+ID;
    $('#item_hist').load('query.php' + dataString);
    return false;  // prevents bubbling the click to the container
});
于 2012-09-26T19:23:47.530 に答える