0

重複の可能性:
jQuery-divがクリックされたときのon()関数。ただし、そのdivの子がクリックされたときは機能しません。

$(oTrPlanning).prev().children('td').each(function () {
    this.onclick = setCountClick;
});

TDをクリックするsetCountClick()と呼び出されますが、TDにはTextbox:も含まれています。

<td> 
    <input class="Input-InlineFilter" id="TextFirst"  type="text" value="">
</td>

したがって、で何かを入力し始めるとTextboxsetCountClick()が再び呼び出されます。setCountClick()TDがクリックされたときに呼び出したいのですが、 Textbox

4

2 に答える 2

5

クリック イベントは、DOM を から にバブルアップtextboxtdますbodytextboxクリックでクリック ハンドラーをトリガーしたくない場合はtd、バブリングを停止する必要があります。

$('#TextFirst').click(function (e) {
    e.stopPropogation();
});

stopPropagation のドキュメント

展開するには、このバブリングを利用して、すべての sに対して1 つのイベント ハンドラーのみをバインドする必要があります。td

// bind one handler to all tds
$(oTrPlanning).prev().on('click', 'td', function (e) {
    // ensure the clicked element is a TD
    if (this.nodeName === 'TD') {
        setCountClick(e);
    }
});

nodeName のドキュメント

this内のどこかで演算子に依存している場合setCountClick、期待どおりに機能しなくなる可能性があることに注意してください。$.proxyそれを修正するには、 usingまたはbindwhen you callを調べる必要がありsetCountClickます。

setCountClick.bind(this)(e);

bindthis新しい関数内のパラメーターとして渡した引数を使用する新しい関数を返します。次に、その関数を実行し、通常のパラメーターを渡します。

バインドのドキュメント

于 2013-01-09T15:16:03.473 に答える
0

問題は、イベントが子から親に伝搬されることです。次のようにバインドできます。

$(oTrPlanning).prev().on('click', 'td', setCountClick);

メソッドは最初の引数としてsetCountClickを受け取ります。これは次のように検査できます。event

function setCountClick(event) {  
   // make sure the click was on a TD and not something else
   if ($(event.target).is('td')) {
        // you've hit a TD, run your code here
   }

}
于 2013-01-09T15:23:32.820 に答える