2011-08-30 32 views
11

Tôi có biểu mẫu sử dụng plugin giao diện người dùng tự động hoàn thành, http://jqueryui.com/demos/autocomplete/, tất cả đều hoạt động ngọt trừ khi bạn nhấn phím enter để chọn mục trong tự động hoàn thành danh sách, nó sẽ gửi biểu mẫu.Dừng biểu mẫu khóa 'nhập' khi sử dụng tiện ích tự động hoàn thành jquery ui

Tôi đang sử dụng điều này trong trang web biểu mẫu web .NET, do đó, có thể có xử lý javascript được liên kết với biểu mẫu .NET đang tiêm ghi đè nội dung jQuery (tôi đang suy đoán ở đây).

Trả lời

14

Bạn có thể sử dụng trình xử lý sự kiện trên đó.

$("#searchTextBox").keypress(function(e) { 
    var code = (e.keyCode ? e.keyCode : e.which); 
    if(code == 13) { //Enter keycode 
     return false; 
    } 
}); 

see: jQuery Event Keypress: Which key was pressed?

thêm: http://www.cambiaresearch.com/c4/702b8cd1-e5b0-42e6-83ac-25f0306e3e25/javascript-char-codes-key-codes.aspx cho danh sách các mã phím

+0

Ví dụ hay! Hãy thử quá '... if (code == $ .ui.keyCode.ENTER) {return false; } ... '. Xem một https://ce.jqueryui.com/jQuery.ui.keyCode/ ..jzm souce thanks – KingRider

4

Một cách là xử lý nhấn phím và bỏ qua nó nếu đó là phím enter.

+1

Nhưng tôi chỉ muốn bỏ qua phím nhập nếu nó được nhấn khi chọn một tùy chọn từ danh sách autocomplete. Nếu người dùng không tập trung vào danh sách các tùy chọn tự động hoàn thành thì tôi _do_ muốn gửi biểu mẫu. –

+1

@JohnieKarr: Ưa thích khi thấy bạn trả lời câu hỏi tôi đang tìm kiếm ... –

5
$("#autocomplete_field_id").keypress(function(event){ 
    var keycode = (event.keyCode ? event.keyCode : event.which); 
    if (keycode == '13') { 
    event.preventDefault(); 
    event.stopPropagation();  
    } 
}); 
2

Câu trả lời ace bài giúp tôi giải quyết vấn đề của tôi. Mặc dù bạn cần lưu ý rằng mã ace cung cấp phải tồn tại trước $('input').autocomplete(*****), nếu không bạn sẽ không nhận được bất kỳ hiệu ứng nào.

2

Nếu bạn vẫn muốn phím Enter để gửi, sau khi lựa chọn autocomplete được thực hiện,

if (evt.keyCode === 13 && !$('.ui-autocomplete').is(':visible')) { 
    $('.ui-button:first').click(); 
} 
evt.stopPropagation(); 
+2

Cái này không có tác dụng với tôi, bởi vì khi sự kiện được gọi tới hàm gọi lại của tôi, tính năng tự động hoàn tất chưa được hiển thị. –

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