【问题标题】:jQuery callbacks firing too earlyjQuery 回调触发太早
【发布时间】:2010-09-23 20:44:37
【问题描述】:

在使用 jQuery 为 IE 7 中按钮的单击事件分配函数时遇到问题。像下面这样的东西在 Opera 中可以正常工作,但在 IE 中会产生无限循环:

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

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

【问题讨论】:

    标签: javascript jquery internet-explorer callback


    【解决方案1】:

    我认为您回答的关键在于取消绑定您已经绑定到 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 中,不取消绑定事件也会产生有趣的递归情况。

    【讨论】:

    • 这是我的回答假设:回调正在累积。
    【解决方案2】:

    或者直接使用.one绑定事件

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2015-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多