2009-09-29 22 views
5

Tôi có một biểu mẫu, trong đó tôi vô hiệu hóa nút gửi cho đến khi người dùng nhập tất cả các trường bắt buộc. Ban đầu tôi đã sử dụng onkeyup để giữ một tab trên các trường bắt buộc và bật nút khi tất cả các trường bắt buộc được điền.Kích hoạt sự kiện javascript khi sử dụng Google auto fill on firefox

Nhưng tôi đã yêu cầu người dùng khiếu nại rằng họ đã điền vào biểu mẫu bằng cách sử dụng nút Tự động điền trên thanh công cụ của Google và nút gửi vẫn bị vô hiệu hóa.

Tôi đã khắc phục sự cố này trong IE bằng cách gọi sự kiện onpropertychange cho từng yếu tố đầu vào và nó hoạt động tốt.

Nhưng trong firefox, tôi không thể tìm thấy sự kiện sẽ được kích hoạt khi nhấp vào nút tự động điền của google.

Giúp đánh giá cao.

+0

Đó là một vấn đề 6 năm trước (http://allinthehead.com/retro/102/lần-họ-đang-onchanging) và vẫn còn ngày hôm nay. –

+0

Địa ngục, tự động điền là shiite: http://www.google.com/support/forum/p/Toolbar/thread?tid=7dcddc95f43dac19&hl=vi –

Trả lời

0

Đánh giá từ điều này google toolbar support thread, có vẻ như tự động điền không chỉ là một PITA lớn cho các nhà phát triển, mà còn rất khó tắt. Tính đến ngày 09 tháng 8 google tuyên bố nó sẽ tôn vinh các thuộc tính autocomplete="off" trên có chứa form nhưng tính đến nay tính năng này dường như chưa được phát hành.

Bạn sử dụng để có thể cung cấp cho các yếu tố đầu vào của bạn tên phi sensical (ví dụ name="xx_Address_32423423") để gây nhầm lẫn tự động điền (và do đó hiệu quả vô hiệu hóa nó), nhưng họ đã thực hiện tự động điền nhiều hơn "thông minh" bằng cách nhìn vào chuỗi con trong vòng tên phần tử của bạn để xác định xem trường có thể được tự động điền hay không (một lần nữa, đánh giá từ các khiếu nại trong chuỗi đó).

Trong trường hợp của bạn, bạn cũng có thể cuộn bằng các cú đấm và tìm số tương đương cho onpropertychange cho Firefox. Hãy xem qua số DOMAttrModified event. Specifially, hãy thử kiểm tra các event.attrName property để xem nếu value đã được thay đổi bằng cách tự động điền:

function realOnChange(event) { 
    var attrName = event.propertyName || event.attrName; 
    if(attrName === 'value') { 
     // etc 
    } 
} 

Vui lòng cung cho event.propertyName là ngắm nhìn tương thích với onpropertychange thực hiện hiện tại của bạn (nếu đó là thậm chí có thể).

1

Cảm ơn câu trả lời của bạn. Tôi đã phải trả lời nhanh chóng cho vấn đề này vì thế tôi đã sử dụng hàm 'setTimeOut()' để kiểm tra các trường bắt buộc và bật nút gửi.

$().ready(function() { 
    CheckRequiredFields(); 
    timeOutRtn = setTimeout("AutoMonitorMandatoryField()", "3000"); 
}); 

function AutoMonitorMandatoryField() { 
    if ($("#btnSave").attr("disabled")) { 
     CheckRequiredFields(); 
     timeOutRtn = setTimeout("AutoMonitorMandatoryField()", "3000"); 
    } 
} 

crescentfresh - Tôi sẽ nhìn vào sự kiện DOMAttrModified và xem nếu tôi có thể lấy nó để làm việc cho me.Thanks

0

Không cần thêm setTimeout phức tạp cũng không setInterval.

Chỉ cần nắm bắt những "thay đổi" sự kiện của bất kỳ textbox bơm lại của hình thức, đi qua tất cả các lĩnh vực bơm lại và nếu nó không có sản phẩm nào che lấp phần nhãn

+1

sự kiện thay đổi không được kích hoạt và tôi không thể thấy bất kỳ sự kiện nào khác được kích hoạt khi tự động điền. Có vẻ như phải làm $ (cửa sổ). Load và kiểm tra $ ('input: -webkit-autofill') ... nhưng thậm chí sau đó nó chỉ SOMETIMES hoạt động ... Tôi nghĩ rằng nó tốt hơn không có gì nếu bạn vẫn đang tìm kiếm giải pháp tối thượng. –

+0

Chrome không kích hoạt bất kỳ sự kiện nào khi nó tự động điền. – enyo

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