2009-08-08 26 views
15

Cập nhật:Phát hiện sự kiện quan trọng (Enter) với JQuery trong Javascript (trên nền tảng Linux)

Cuối cùng tôi đã tìm ra rằng "bấm phím" có khả năng tương thích tốt hơn so với "KeyDown" hoặc "KeyUp" trên nền tảng Linux. Tôi vừa thay đổi "keyup"/"keydown" thành "keypress", vì vậy tất cả đều ổn.

Tôi không biết lý do là gì nhưng đó là giải pháp cho tôi. Cảm ơn tất cả những ai đã trả lời câu hỏi của tôi.

-

Tôi có một số mã mà cần phải phát hiện sự kiện nhấn phím (Tôi có biết khi nào báo chí sử dụng Enter) với JQuery và đây là các mã trong 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 
    } 
} 

Nó hoạt động tốt trên Windows nhưng trên Linux, đôi khi nó không bắt được sự kiện Enter. Ai đó có thể giúp đỡ?

Cập nhật:

Có vẻ như tốt nếu tôi chỉ sử dụng tiếng Anh để nói chuyện. Nhưng tôi phải sử dụng một số phương thức nhập liệu để nhập tiếng Trung. Nếu đó là vấn đề? (JQuery không thể phát hiện Enter nếu tôi sử dụng phương pháp đầu vào Trung Quốc?)

+1

và Linux có gì để làm với nó giao phối. – think123

Trả lời

47

Hãy thử điều này

<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

Khối if nên bao gồm 'e.preventDefault(); 'trừ khi bạn muốn tắt tất cả nhập trong hộp văn bản. – Muhd

12

Sử dụng if (l.keyCode == 10 || l.keyCode == 13) thay vì if (l.keyCode == 13) ...

Dưới Windows, một dòng sản phẩm mới bao gồm một Carriage Return (13) tiếp theo là một Line Feed (10) .

Dưới * nix, dòng mới chỉ bao gồm Line Feed (10).

Trong Mac, dòng mới chỉ bao gồm Carriage Return (13).

+0

Tôi đã thêm "l.keyCode = 10" nhưng tôi vẫn gặp sự cố. Và tôi sử dụng "console.log (l.keyCode)" để xem mã khóa là gì, có vẻ như chỉ có "13" khi tôi nhấn Enter (Trên Linux) –

0

Điều này có thể là sự cố cụ thể của trình duyệt. Các trình duyệt khác nhau xử lý mã khóa khác nhau. Thật tốt khi bình thường hóa này trước khi kiểm tra:

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

Điều quan trọng cần lưu ý là trình duyệt webkit có một ánh xạ chính hơi khác so với phần còn lại:

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) 
     }; 

Mã này có thể được tìm thấy trong tiện ích kiện YUI của.

Các vấn đề liên quan