如何在jQuery绑定的keyup事件处理函数内部调用自身?
解决你的两个函数调用问题
嘿,我来帮你搞定这两个问题,尤其是你给出的jQuery代码场景!
问题2:在给定的绑定函数内部调用自身
你现在的代码里用了$("input[name^=prdname]").trigger('keyup')来触发事件,但其实更直接高效的方式是把匿名函数抽成具名函数,这样就能在内部直接调用它,还能避免不必要的事件触发循环,刚好能解决你说的combogrid第二次才加载的问题。
修改后的代码如下:
$(document).ready(function(){ // 先定义具名的事件处理函数 function handlePrdnameKeyup(e){ // some code if($('#quick_error').val() == 0){ $("#quick_error").val('1'); // 直接调用自身,不用触发整个keyup事件 handlePrdnameKeyup(e); return false; } // 这里写加载combogrid的代码,现在第一次按键就能执行到啦 // loadCombogrid(); 示例逻辑 } // 绑定事件时使用这个具名函数 $("input[name^=prdname]").bind('keyup', handlePrdnameKeyup); });
为什么这样改?
- 原来的
trigger('keyup')会触发所有绑定在该元素上的keyup事件,可能带来额外的性能开销或者意外行为 - 直接调用具名函数更精准,只执行你需要的逻辑,第一次满足条件时就能进入函数执行加载逻辑,不会等到第二次按键
问题1:在函数内部调用通过bind绑定的函数
核心思路和上面一致:不要用匿名函数,把绑定的函数定义成具名函数,这样不管是绑定事件还是在函数内部调用,都能直接用函数名调用,代码可读性和维护性都更好。
如果因为特殊原因必须使用匿名函数(不推荐),可以用arguments.callee来引用当前函数,但要注意这个特性在严格模式下是被禁用的,示例如下:
$("someElement").bind('event', function(e){ // 调用自身 arguments.callee(e); });
但还是强烈推荐具名函数的写法,没有兼容性隐患,逻辑也更清晰。
内容的提问来源于stack exchange,提问作者Madhan
相关产品推荐
相关产品推荐

