$('#start')
执行函数myFunction()
,$('#stop')
结束它。如何阻止myFunction()
执行?
function myFunction() {
$(document).mousemove(function(e) {
$('#field').html(e.pageY)
});
}
$('#start').click(function() {
myFunction();
});
$('#stop').click(function() {
//stop myFunction
});
答案 0 :(得分:3)
正如丹尼尔指出的那样,你实际上想解开事件处理程序的绑定。您可以使用unbind
:
$('#stop').click(function() {
$(document).unbind('mousemove');
});
但是这也将删除所有其他mousemove
事件处理程序,它们可能被其他插件或类似程序附加(我的意思是,您附加到document
元素而不是“自定义”元素,所以它可以是其他JavaScript代码也将处理程序绑定到此元素。)
为防止这种情况发生,您可以使用event namespaces。您可以使用以下内容附加监听器:
function myFunction() {
$(document).bind('mousemove.namespace', function(e) {
$('#field').html(e.pageY);
});
}
并解开绑定:
$('#stop').click(function() {
$(document).unbind('mousemove.namespace');
});
这只会删除您的特定处理程序。
答案 1 :(得分:2)
您没有停止执行此功能。您的myFunction()
只是将回调附加到事件侦听器,只要在文档上移动鼠标就会调用该事件侦听器。调用回调函数并立即终止。
您只想取消绑定事件侦听器的回调。查看具体示例的其他答案。
答案 2 :(得分:2)
更好的方法是使用bind和unbind,如下所示:
function myFunction() {
$(document).mousemove(function(e) {
$('#field').html(e.pageY)
});
}
$('#start').bind('click', myFunction);
$('#stop').click(function() {
$('#start').unbind('click', myFunction);
});
答案 3 :(得分:2)