0

私のプロジェクトでは、使用している jQuery のバージョンを 1.4.2 から 1.7.2 に更新しました。<tr>要素のクリック イベント ハンドラーを処理しているときに、予期しない動作が見られるようになりました。

複数のサイトには、最初の列にラジオ ボタンがあるテーブルが含まれています。したがって、HTMLは次のようになります

<table>
  <tbody>
    <tr onclick="selectOnClick(this)">
      <td><input type="radio" .... /></td>
      ......
    </tr>
...

別のjsファイルには、JS関数の定義があります

function selectOnClick(row) {
  $(row).children('td').children('input :first').click();
  $(row).children('td').children('input :first').click();
  $(row).children('td').children('input :first').click();
}

したがって、テーブルの行内の要素がクリックされるたびに、最初の入力要素がクリックされます。関数内で同じステートメントを 3 回呼び出す必要があった理由はわかりませんが、それには理由がありました。

私の問題は、jQuery の更新 (v.1.4.2 --> 1.7.2) の後、行をマウスで 1 回クリックすると、1 つではなく数百のイベントが生成されることです。ブラウザはそれらを処理するために非常にビジーであるため、まったく反応していないように見えます。関数をclick()一度だけ呼び出すように変更しても、変更されません。

誰かがその効果の理由を教えてもらえますか.

4

1 に答える 1

1

子要素の 1 つでクリック イベントをトリガーするたびに、バブルが tr に戻り、無限ループが発生します。イベントの代わりにハンドラーをトリガーしてみてください。

function selectOnClick(row) {
    $(row).children('td').children('input :first').triggerHandler("click");
}

ただし、これは jQuery バインド イベントのみをトリガーすることに注意してください。

于 2012-07-18T20:51:14.467 に答える