2015-10-13 115 views
0

我嘗試使用jQuery的事件只有一次,我有以下功能:運行jQuery的事件處理程序只有一次

function usrPlay() { 
    var flag = true; 
    while (flag === true) { 
     $(".pincha").click(function() { 
      console.log($(this).attr("value")); 
      flag = false; 
     }); 
    } 
} 

但是...看來,這使得一個無限循環,但我can`不明白爲什麼。 有什麼幫助嗎?謝謝!!

回答

0

但是...看來,這使得一個無限循環,但我可以`噸明白爲什麼。

這是因爲你只附加循環內的事件,事件處理程序不會在循環內部執行,所以標誌不會更改爲false。
而且您可能需要使用全局變量flag而不是本地變量,因爲事件處理函數不會在usrPlay函數的作用域中執行。試試這個:

function usrPlay(){ 
    window.flag = true; 
    $(".pincha").click(function(){ 
    if (window.flag === true){ 
     console.log($(this).attr("value")); 
     window.flag = false; 
    } 
    }); 
} 
+0

我標記了這個答案,因爲它不僅解決了我的具體問題,而且讓我知道它爲什麼不起作用。 謝謝! –

2

爲此,jQuery有一個名爲.one()的函數。

您可以使用下面的代碼來解決您的問題。

$(".pincha").one("click", function(){ 
    console.log($(this).attr("value")); 
}); 

更多信息有關.one()

http://api.jquery.com/one/

+0

This Works,thanks。但我標記了另一個答案,因爲我可以瞭解爲什麼我的代碼無法工作。 –