jquery:结束另一个函数的函数

时间:2010-10-02 07:45:56

标签: javascript jquery

$('#start')执行函数myFunction()$('#stop')结束它。如何阻止myFunction()执行?


function myFunction() {
     $(document).mousemove(function(e) {
          $('#field').html(e.pageY)
     });
}


$('#start').click(function() {
    myFunction();
});


$('#stop').click(function() {
   //stop myFunction
});

4 个答案:

答案 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)

您想要使用jQuery bindunbind方法。例如:

function myFunction() {
     $(document).mousemove(function(e) {
          $('#field').html(e.pageY)
     });
}


$('#start').bind('click.myFunction', function() {
    myFunction();
});

$('#stop').bind('click', function() {
    $('#start').unbind('click.myFunction');
});