0

我有这个代码

<script>
    $(document).ready(function () {
        $('.InternalSearchKeyword').keyup(function () {
            clearTimeout(typingTimer);
            if ($('.InternalSearchKeyword').val) {
                typingTimer = setTimeout(doneTypingKeyword, doneTypingInterval);
            }
        });

        function doneTypingKeyword() {
            alert('Hello');
            debugger;
        }
    });
</script

我的问题是当我尝试运行程序时它会触发 2 次,当我尝试在 IE 中调试它时,我注意到脚本块正在再次加载 javascript 是否有可能的方法来阻止脚本块触发脚本?我正在 MVC 4 中开发。

发生的事情是当文档准备好时,javascript 将加载。并且在加载它之后,脚本块将再次加载它,这就是它触发两个事件的原因,当我也有一个事件时,它会继续触发两次。

4

1 回答 1

0

我不熟悉 ASP.NET,但是如果代码由于某种原因执行了两次,您可以修改 jQuery 来解决这个问题:

$(document).ready(function () {
    function handleSearchKeyword() {
        clearTimeout(typingTimer);
        if ($('.InternalSearchKeyword').val()) {
            typingTimer = setTimeout(doneTypingKeyword, doneTypingInterval);
        }
    }

    $('.InternalSearchKeyword').off('keyup', handleSearchKeyword).keyup(handleSearchKeyword);

    function doneTypingKeyword() {
        alert('Hello');
        debugger;
    }
});

这将删除keyup运行该函数的处理程序(如果存在),然后绑定一个新的keyup处理程序来执行该函数。因此,无论代码执行多少次,都只会有一个事件处理程序。

于 2013-09-27T10:32:05.073 回答