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将再次加载它“是什么让你认为这个块被加载了两次?你不是包含了两次吗?顺便说一句,一旦触发,伪就绪事件未绑定的附加处理程序,所以不能调用同一个处理程序两次。