2010-10-02 214 views
0

$('#start')執行函數myFunction()$('#stop')結束它。如何停止執行myFunction()jquery:函數結束另一個函數


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


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


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

回答

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'); 
}); 

這隻會刪除您的具體處理程序。

+0

這樣更實用。謝謝! – Zebra 2010-10-02 08:11:18

2

你不執行停止功能。您的myFunction()只需將回調附加到事件偵聽器,只要在文檔上移動鼠標,就會調用該事件偵聽器。回調函數被調用並立即終止。

你只想從事件監聽器解除綁定回調。查看具體示例的其他答案。

+0

它不會停止執行。 – Zebra 2010-10-02 07:50:57

2

一個更好的辦法是使用綁定和取消綁定,就像這樣:

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

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

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

太棒了。非常感謝你! – Zebra 2010-10-02 07:57:32

+1

它應該是'bind('click',myFunction)',而不是bind('click',myFunction())'。類似於「unbind」。 – kennytm 2010-10-02 08:00:02

+0

感謝KennyTM,我從來沒有真正使用jQuery的綁定功能與命名函數。 – 2010-10-02 08:11:55

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'); 
}); 
+0

不用擔心。費利克斯的答案的後半部分更好。 – 2010-10-02 14:00:29

相關問題