在我的项目中,我将使用过的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()
。
有人可以告诉我这可能是什么原因。
答案 0 :(得分:1)
每当你在其中一个子元素上触发click事件时,它就会气泡回到tr,从而导致无限循环。尝试触发处理程序而不是事件。
function selectOnClick(row) {
$(row).children('td').children('input :first').triggerHandler("click");
}
但请注意,这只会触发jQuery绑定事件。