2010-03-05 38 views
10

我有一個文本框,並分配了以下功能(這是指定的唯一功能):jQuery的:文本KEYUP射擊兩次

txt.bind("keyup",function(event){ 
    if(event.keyCode==13) 
    { 
     var nu = $("#debug").html(); 
     nu+="<br>enter"; 
     $("#debug").html(nu); 
    } 
}); 

奇怪的是,它實際上是發射兩次,從而顯示「輸入」在我的調試窗口中兩次。 有誰知道這是什麼原因造成的?

+0

在我的情況下,我使用掃描槍,它模擬每個鍵入的字符的關鍵板鍵盤,所以我用jquery檢測工具,https://codepen.io/krissco/pen/XdywLo解決了我的問題,它的檢查時間betweeneach keup以區分正常的鑰匙ups :) – shareef 2018-01-21 17:35:02

回答

3

我自己發現 - txt.bind被分配兩次到文本框,所以它被觸發兩次。 這是一個錯誤?我認爲綁定一個函數總是會觸發一次..嗯

+2

請提供您的代碼,如前所述...我們發現:-) – 2010-03-05 14:30:50

+1

這不是一個錯誤,因爲你可能需要兩個獨立的函數來觸發keyup。創建綁定時您一定要小心。 – EndangeredMassa 2010-03-05 14:41:09

0

是否有可能您的html元素包含兩次在txt中?

如果您要提供html和指定的javascript代碼將會很有幫助。

2

我有同樣的問題 - KEYUP的keydown事件被解僱兩次,雖然他們的處理也必然只有一次,我肯定他們連接到只有一個元素。

有趣的一點是,這種行爲只能在Internet Explorer中觀察到,並且只有一種特殊情況下我的web應用程序顯示在嵌入式ActiveX控件(CLSID_InternetExplorer)中。操作系統:Windows 7,IE 8,嵌入式ActiveX控件在IE7兼容模式下運行。

但是我發現了一個解決方法 - 處理jQuery的keypress事件,這在我的webapp中也變得更加語義化。

+0

即使在(當前最新的)jQuery v3.3.1中,我也可以確認問題是「keyup」事件相關的。將其更改爲「按鍵」可解決問題。 – 2018-02-07 13:08:42

1

我有類似的問題
發現分配KEYUP功能對象是另一對象
第一個是DIV第二個是輸入
發現KEYUP被分配到輸入端和一個div與該輸入

0

內部下面是我對同一個問題的解決方法:

$('input').live('keyup keydown', function(e) { 
    var thisKey = e.keyCode ? e.keyCode : e.which; 
    if (thisKey == 13) { 
     e.preventDefault(); 
     e.stopPropagation(); 
     if (e.type == 'keyup') { 
      $(this).closest('form').submit(); 
     } 
    } 
}); 
4

我知道它已經很長一段時間,但我很驚訝沒有人建議:

txt.unbind(); 
txt.bind("keyup",function(event){ 
    if(event.keyCode==13) 
    { 
     var nu = $("#debug").html(); 
     nu+="<br>enter"; 
     $("#debug").html(nu); 
    } 
}); 

如果以某種方式已經綁定了txt,請在您的新綁定修復它之前先調用取消綁定。當然,最好弄清楚它爲什麼被綁定兩次。這發生在我身上,因爲我不小心讓我的JavaScirpt文件包含了兩次。呼籲解除綁定幫助我確定這是問題。

1

我有同樣的問題。雖然我還找不到解決方案,但我找到了觸發兩次的原因。

如果輸入的文本有「@」,我正在處理事件。爲此我列出每個關鍵筆劃。 要輸入'@',您需要兩個鍵過程(@ + shift),這就是觸發兩次的原因。

+0

明顯當你想到它! :-) – 2015-12-05 14:55:53