vQuery在v.1.4.1和1.7.2之间的变化影响了tr click事件

时间:2012-07-18 20:37:38

标签: jquery html-table click row

在我的项目中,我将使用过的jQuery版本从1.4.2更新为1.7.2。现在,我在处理<tr>元素的click事件处理程序时发现了一些意外行为。

多个站点包含第一列中带有单选按钮的表。所以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 - &gt; 1.7.2)之后,单击该行会产生数百个事件而不是单个事件。浏览器忙于处理它们,看起来它根本没有反应。如果我修改了函数,只有在它没有改变时才调用click()

有人可以告诉我这可能是什么原因。

1 个答案:

答案 0 :(得分:1)

每当你在其中一个子元素上触发click事件时,它就会气泡回到tr,从而导致无限循环。尝试触发处理程序而不是事件。

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

但请注意,这只会触发jQuery绑定事件。