由于脚本块导致2次事件触发

时间:2013-09-27 10:25:00

标签: jquery asp.net-mvc-4

我有这段代码

<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将加载。 并在加载后,scripblock将再次加载它,这就是为什么它会触发两个事件 当我有一个事件,它继续发射两次。

1 个答案:

答案 0 :(得分: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处理程序以执行该函数。因此,无论代码执行多少次,都只会有一个事件处理程序。