Jquery 由于脚本块,事件触发2次

Jquery 由于脚本块,事件触发2次,jquery,asp.net-mvc-4,Jquery,Asp.net Mvc 4,我有这个密码 <script> $(document).ready(function () { $('.InternalSearchKeyword').keyup(function () { clearTimeout(typingTimer); if ($('.InternalSearchKeyword').val) { typingTimer = setTimeout(doneT

我有这个密码

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

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

$(文档).ready(函数(){
$('.InternalSearchKeyword').keyup(函数(){
clearTimeout(键入计时器);
if($('.InternalSearchKeyword').val){
typingTimer=setTimeout(doneTypingKeyword,doneTypingInterval);
}
});
函数doneTypingKeyword(){
警惕(“你好”);
调试器;
}
});

我不熟悉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
处理程序来执行该函数。因此,无论代码执行多少次,都将只有一个事件处理程序。

if($('.InternalSearchKeyword').val)
应该是
if($('.InternalSearchKeyword').val())
-
val
是一个函数,因此将始终解析为
true
,您需要调用它来获取实际值。“文档准备好后,将加载javascript。加载后,scripblock将再次加载它“是什么让你认为这个块被加载了两次?你不是包含了两次吗?顺便说一句,一旦触发,伪就绪事件未绑定的附加处理程序,所以不能调用同一个处理程序两次。