2012-02-24 77 views
10

Tôi có một biểu mẫu với một số trường phổ biến như "email". Tôi có javascript mà bắt phím trở lại (13) và gửi biểu mẫu, nhưng tác dụng tương tự đã được quan sát thấy khi sử dụng thuộc tính defaultButton trên bảng chủ.Tự động hoàn tất tự động điền 'nhập' khi bật tự động hoàn tất nhập trên hộp văn bản

Nếu người dùng đang ở trên IE và đang nhập địa chỉ email của mình, sau đó chọn một mục từ tự động điền nội tuyến của trình duyệt bằng cách nhấn ENTER, không bấm phím nào được gửi tới Javascript. TỐT.

Tuy nhiên, trên Firefox, hộp văn bản nhận được phím ENTER và muốn gửi biểu mẫu chưa hoàn thành.

Có ai biết cách ngăn điều này ngoài việc tắt tự động hoàn tất không? Tôi không thể tìm ra cách để phát hiện rằng phím bấm thực sự có nguồn gốc từ hộp danh sách hoàn chỉnh tự động.

Tôi đang sử dụng asp.net và jQuery.

Chỉnh sửa - để làm rõ: Nhấn enter trên một mục trong tự động hoàn tất sẽ KHÔNG gửi biểu mẫu. Hành vi của IE là chính xác (một lần!).

xử lý sự kiện của tôi trong bản thân chỉ đơn giản là:

trên chìa khóa lên (thử bấm phím quá) - if (e.which == 13) submitForm();

Vấn đề là, tôi không biết làm thế nào để phát hiện rằng ENTER báo chí thực sự đến từ sự kiểm soát autocomplete

+1

Điều này có thể giúp bạn không? http://stackoverflow.com/questions/270494/enter-button-does-not-submit-form-ie-only-asp-net – Niklas

+0

Tôi nghĩ rằng vấn đề bắt nguồn từ trình xử lý e. Nhận xét đầu tiên bạn có thể trợ giúp. – sinanakyazici

+0

bạn có thể hiển thị javascript chứa thông tin nhập không. Các phím được xử lý khác nhau trên các trình duyệt – Aristos

Trả lời

1

Mở nhập nhấn phím, bạn có thể kiểm tra phần tử hiện hành về trọng tâm là những gì:

$("*:focus") 

nếu phần tử không được đính kèm chưa hoàn chỉnh thì bạn có thể gửi biểu mẫu của mình. hãy xem trên: How to select an element that has focus on it with jQuery

2

Bạn có thể lưu giá trị của trường trên khóa xuống và sau đó kiểm tra lại khi nhấn phím. Nếu có nhiều hơn 1 ký tự khác nhau trong chuỗi từ một lần nhấn phím, bạn có thể giả định rằng một mục tự động hoàn tất được chọn và nhập sẽ bị bỏ qua.

Trường hợp duy nhất mà thao tác này không hoạt động khi bạn có một trường như: [email protected] và bạn đang chọn mục tự động hoàn tất chỉ có chữ cái cuối cùng được thêm vào, phím enter sẽ gửi biểu mẫu không chủ ý.

Hy vọng rằng chúng tôi sẽ bắt đầu ít nhất. Tôi đang cố gắng giải quyết một giải pháp chống đạn. Tôi sẽ cập nhật nếu tôi tìm thấy.

EDIT

Vít ở trên. Sắp xếp nó ra. Nếu bạn kiểm tra phím enter khi khóa, và giá trị trường đầu vào không giống nhau trên cả hai phím xuống/lên, bạn có thể giả định một mục tự động hoàn tất được chọn.

var loginCurrentInput = ''; 

$('input').keydown(function(e) { 

    loginCurrentInput = $(this).val(); 

} 

$('input').keyup(function(e) { 

    //if enter key pressed 
    if(e.keyCode == 13) { 

    //check for changed input value 
    if($(this).val() != loginCurrentInput) { 

     loginCurrentInput = $(this).val(); 
     return false; 

    } 

    $('#button').trigger('click'); 

    } 

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