2013-08-21 43 views
0

由於某種原因,我的onkeyup似乎在IE9上被一些人觸發兩次。Javascript onkeyup有時會被觸發兩次

我現在的功能是這樣的:

document.getElementById("chatboxtextarea").onkeyup=function(e) { 
    e = e || window.event; 
    var msg = document.getElementById('chatboxtextarea').value; 
    if(e.keyCode != null) { 
     if (msg.replace(/\r/g, '\\\\r').replace(/\n/g, '') != "" && e.keyCode == 13) { 
      var textarea = document.getElementById('chatboxtextarea'); 
      textarea.value = ''; 

      var d = new Date(); 
      var curr_hour = d.getHours(); 
      var curr_min = d.getMinutes(); 
      var tD = curr_hour + ":" + curr_min; 


      var url = 'http://domain.com/sub/' + kanal + '/' + encodeURIComponent(_aNM) + '/' + encodeURIComponent(_sid) + '/' + encodeURIComponent(_aID) + '/' + encodeURIComponent(_pMsg) + '/' + encodeURIComponent(msg.replace(/\r/g, '').replace(/\n/g, '')) + '/' + encodeURIComponent(_hits); 
      var data = {}; 
      var callback = function (data) { }; 
      J50Npi.getJSON(url, data, callback);        
     } else if (msg.replace(/\r/g, '\\\\r').replace(/\n/g, '') == '') { 
      var textarea = document.getElementById('chatboxtextarea'); 
      textarea.value = ''; 
     }   
    } 
}; 

這是一個基本的聊天輸入框。問題是服務器收到來自這些IE9用戶的兩條消息(有時)。

我如何添加支票以查看人們是否已在最近1秒內寫入消息?像垃圾郵件預防功能..我想這會解決問題?

任何想法?

回答

2

是否有可能人們快速按下輸入鍵兩次?

任何時候我必須執行異步操作,我會反彈輸入。

緊隨您的keycode == 13檢查之後,首先檢查textares是否已被禁用,如果已禁用,則忽略任何進一步處理。 其次,將textarea設置爲禁用。第三,成功刪除J50Npi.getJSON();

textarea.setAttribute("disabled","disabled"); 
textarea.removeAttribute("disabled"); 

http://jsfiddle.net/Tnwje/1/

+0

不能是可能的,他們按兩次快,在整個聊天對話使用IE9的人總是有正好有兩個相同的消息,而不是一個 – Alosyius