2009-08-08 93 views
15

更新:檢測在Javascript中使用jQuery的關鍵事件(回車)(在Linux平臺上)

我終於想通了,「按鍵」比在Linux平臺上「的keydown」或「KEYUP」一個更好的兼容性。我只是把「keyup」/「keydown」改成了「keypress」,所以一切順利。

我不知道是什麼原因,但它是我的解決方案。感謝所有回覆我的問題的人。

-

我有一些需要檢測按鍵事件代碼(我必須知道,當用戶按Enter鍵)與jQuery,這裏是在Javascript代碼:

j.input.bind("keyup", function (l) { 
    if (document.selection) { 
     g._ieCacheSelection = document.selection.createRange() 
    } 
}).bind("keydown", function(l) { 
    //console.log(l.keyCode); 
    if (l.keyCode == 13) { 
     if(l.ctrlKey) { 
      g.insertCursorPos("\n"); 
      return true; 
     } else { 
      var k = d(this), 
      n = k.val(); 
      if(k.attr('intervalTime')) { 
        //alert('can not send'); 
        k.css('color','red').val('Dont send too many messages').attr('disabled','disabled').css('color','red'); 
        setTimeout(function(){k.css('color','').val(n).attr('disabled','').focus()},1000); 
        return 
      } 
    if(g_debug_num[parseInt(h.buddyInfo.id)]==undefined) { 
      g_debug_num[parseInt(h.buddyInfo.id)]=1; 
    } 
     if (d.trim(n)) { 
      var m = { 
       to: h.buddyInfo.id, 
       from: h.myInfo.id, 
       //stype: "msg", 
       body: (g_debug_num[parseInt(h.buddyInfo.id)]++)+" : "+n, 
       timestamp: (new Date()).getTime() 
      }; 
      //g.addHistory(m); 
      k.val(""); 
      g.trigger("sendMessage", m); 
      l.preventDefault(); 
      g.sendStatuses(""); 
      k.attr('intervalTime',100); 
      setTimeout(function(){k.removeAttr('intervalTime')},1000); 
      return 
     } 
     return 
    } 
} 

它在Windows上工作正常,但在Linux上,它有時無法捕捉到Enter事件。有人可以幫忙嗎?

更新時間:

,如果我只用英語交談似乎不錯。但我必須使用一些輸入法來輸入中文。如果這是問題? (JQuery的不能檢測輸入,如果我用中國的輸入法?)

+1

和Linux無關,與它交配。 – think123 2012-07-31 09:06:41

回答

47

試試這個

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" > 
    <title></title> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
</head> 
<body> 
    <div> 
     <input id="TestTextBox" type="text" /> 
    </div> 
</body> 
<script type="text/javascript"> 
    $(function() 
    { 
     var testTextBox = $('#TestTextBox'); 
     var code =null; 
     testTextBox.keypress(function(e) 
     { 
      code= (e.keyCode ? e.keyCode : e.which); 
      if (code == 13) alert('Enter key was pressed.'); 
      e.preventDefault(); 
     }); 

    }); 

</script> 
</html> 
+4

if塊應該包含'e.preventDefault();'除非你想禁用所有在文本框中輸入。 – Muhd 2012-07-12 01:15:32

12

使用if (l.keyCode == 10 || l.keyCode == 13)而不是if (l.keyCode == 13) ...

在Windows下,一個新的生產線由的Carriage Return(13),接着是Line Feed(10) 。

在* nix下,一個新行僅包含一個Line Feed(10)。

在Mac下,一個新行僅包含Carriage Return(13)。

+0

我加了「l.keyCode = 10」,但是我仍然遇到了這個問題。我使用「console.log(l.keyCode)」來查看keyCode是什麼,當我按下Enter時(在Linux上),似乎只有「13」 – 2009-08-08 06:38:09

0

This could是瀏覽器特有的問題。不同的瀏覽器以不同的方式處理鍵碼。這是很好的規範在此之前的檢查:

var code = ev.keyCode || ev.charCode || 0; 

重要的是要注意重要的是WebKit瀏覽器有一個稍微不同的鍵映射比其他人:

var webkitKeymap = { 
      63232: 38, // up 
      63233: 40, // down 
      63234: 37, // left 
      63235: 39, // right 
      63276: 33, // page up 
      63277: 34, // page down 
      25: 9  // SHIFT-TAB (Safari provides a different key code in 
         // this case, even though the shiftKey modifier is set) 
     }; 

這個代碼可以在YUI的事件程序中可以找到。