2017-04-15 84 views
0

有一個輸入文本在「onkeyup」事件上觸發一個函數。當該函數觸發時,我使用.on(「keyup」)方法綁定一個「keyup」事件,以便獲取最後一次按下的鍵以查找它是否是字母數字以便激發我想要的搜索ajax。在完成之後,我使用.off(「keyup」)方法解除連接。JavaScript .on(「keyup」)

但是有一個問題,解除綁定。問題是;我的代碼只運行一次,並且不會輪到一次,然後再次運行,並且不會爲另一輪運行並繼續運行。我替換了我想簡化測試的代碼。

$("#arama").on("keyup",function(event) { 
 
     console.log("asd"); 
 
     $("#arama").off("keyup"); 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="arama" />

我在哪裏弄錯了?

P.S:我已經解決了,這要感謝Chris。

回答

0

您的代碼適用於我(請參閱下文)。也許檢查你綁定你的事件的地方。在頁面顯示之前加載文檔時,它應該被綁定一次。如果多次綁定它(即,如果包含您的函數的代碼運行多次),您將遇到問題。

$("#arama").on("keyup", function(event) { 
 
    var i = event.keyCode; 
 
    if ((i >= 48 && i <= 57) || (i >= 96 && i <= 105)) { 
 
    $("#arama").off("keyup"); 
 
    console.log("Number pressed. Stopping..."); 
 
    } else { 
 
    console.log("Non-number pressed."); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<input id="arama" />

+0

很奇怪,你的代碼運行日誌,即使我寫一次多次http://i.hizliresim.com/JazolQ.png –

+0

這是因爲它被解除綁定'keyup'事件它發射一次後。你可以在'.off(「keyup」)'命令中設置一個條件來控制何時停止運行父功能。 –

+0

你好像誤解了我。看到這些2圖片http://i.hizliresim.com/nRN8da.png http://i.hizliresim.com/GB48Av.png第一張圖片我寫了3個字符,它沒有記錄第三個字符,On第二張圖片我寫了4個字符,並且每隔兩次都記錄一次字符它記錄了第三個和第四個字符的記錄。我正在查看它是否是字母數字不只是數字它是爲了確保它不是按Ctrl,Alt或者是 –

0

無需取消綁定事件。試試這個

$("#arama").on("keyup",function(event) { 
    console.log("asd"); 
}); 
+0

我實際上必須解除它,因爲我每次在輸入文本上按下某個鍵時父函數都會觸發,因此我多次聲明它。如果我不解除綁定,它會一直保持綁定並多次激發代碼。 –

+0

你能分享你的完整代碼嗎? –