[英]How to unbind event handler and pass arguments simultaneously?
我的代码中有以下场景:
function outer() { console.log(x); //after some time if certain conditions are met remove handler from #red $("#red").off("click", outer); } function inner() { var x = 786; $("#red").click(outer); } inner();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="red"> RED </div>
outer
函数不能在inner
函数inner
声明。 该示例是我实际问题的简化版本。 在我的实际问题中, inner
函数是在ajax请求success
时执行的each
函数。 为了使代码工作,我必须将x
作为参数传递给outer
,因为x
超出了outer
的范围。 然后代码就像:
function outer(x) { console.log(x); } function inner() { var x = 786; $("#red").click(function(){ outer(x); }); } inner(); //after some time if certain conditions are met remove handler from #red $("#red").off("click", outer); // Dosen't work now
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="red"> RED </div>
在第一个例子中,我可以取消绑定click handeler,但无法传递x
作为参数。 在第二个例子中,我可以传递x
作为参数但不能解除绑定事件。
$("#red").off("click")
。 我尝试使用闭包但它们也不起作用:
function extra(x) { function outer(x) { console.log(x); //after some time if certain conditions are met remove handler from #red $("#red").off("click", extra(x)); // Hangs the computer } return outer; } function inner() { var x = 786; $("#red").click(extra(x)); } inner();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="red"> RED </div>
点击RED挂起我的电脑,所以我无法测试。
谢谢...
.off()
的工作原理与.on()
所以你的代码看起来像这样:
function outer(x) {
$('body').append('<br>button clicked and event removed! x value: ' + x);
$("#red").off(".onlythis");
}
function inner() {
var x = 786;
$("#red").on('click.onlythis', function(){ outer(x); });
}
inner();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.