jQuery回调过早发生

时间:2008-11-24 22:32:46

标签: javascript jquery internet-explorer callback

我在使用jQuery为IE 7中的按钮的click事件分配函数时遇到问题。类似下面的东西在Opera中工作正常,但在IE中产生无限循环:

function updateIndputFields(index, id) {
   $("#reloadBtn").click(function(){ updateIndputFields(index, id) });
}

据我所知,在这种情况下,无限循环不会是预期的行为。但我是jQuery的新手,所以也许我错过了一些东西。无论如何,我应该怎么做才能使reloadBtn按钮的click事件在IE中设置为'updateIndputFields(index,id)'?

3 个答案:

答案 0 :(得分:6)

我认为你的答案的关键在于解除你已经绑定到click事件的事件。我在IE上使用过这个,如果我明白你要做什么,它似乎做你需要的:

<script type="text/javascript">
function updateIndputFields(index, id) {
$('#output').append('<p>' + index + ' : ' + id + '</p>');
$('#reloadBtn').unbind('click');
$("#reloadBtn").click(function(){ updateIndputFields(index, id) });
}
</script>
<p><a href="#" id="reloadBtn">reload</a></p>
<p><a href="#" onclick="updateIndputFields(1,2);return false;">start</a></p>
<div id="output"></div>

每次单击都应将传递的参数输出一次到输出div中。

如果您没有取消绑定最初​​分配的点击事件,那么它将保持存在,并且每次点击事件时都会为事件附加重复的点击事件处理程序。即使在Firefox中,也没有解除绑定事件会产生一个有趣的递归情况。

答案 1 :(得分:1)

或仅使用.one绑定事件

答案 2 :(得分:0)

在绑定事件之前尝试取消绑定事件。