2012-06-12 30 views
5

Chúng tôi có đầu vào type = "number" và chúng tôi đã đặt phương thức onChange.Giá trị thay đổi theo cách thủ công không kích hoạt sự kiện onChange nếu giá trị được thay đổi trước khi lập trình

Giá trị mặc định của đầu vào là 0.

Sau đó, chúng ta thay đổi giá trị programatically phải nói, 10

Bây giờ chúng ta thay đổi giá trị bằng tay để 0 một lần nữa.

Phương thức onChange Phương thức không được gọi là thay đổi được thực hiện thủ công. Tôi nghĩ đó là vì sự kiện này không được gọi khi chúng tôi thay đổi giá trị của họ theo chương trình thành 10. Vì vậy, theo cách mà kiểm soát cho rằng giá trị vẫn là 0.

Điều này chỉ xảy ra khi tôi đặt giá trị theo cách thủ công cho giá trị đã có TRƯỚC KHI thay đổi có lập trình. Nếu tôi sử dụng bất kỳ giá trị nào khác để thực hiện thay đổi thủ công, sự kiện onChange được kích hoạt chính xác.

+0

Bạn có thể cung cấp ví dụ, chẳng hạn như [jsFiddle] (http://jsfiddle.net), minh họa điều này không? Ngoài ra, những gì bạn đang sử dụng trình duyệt và bạn có chắc chắn trong [hỗ trợ kiểu đầu vào này] (http://caniuse.com/#feat=input-number)? –

+0

đây là js trên safari iOS. Điều thú vị là vấn đề xảy ra chỉ khi tôi thay đổi bằng tay giá trị cho giá trị nó đã có trước khi thay đổi chương trình. Trong bất kỳ trường hợp nào khác, số đầu vào kích hoạt hoàn toàn phương thức onchange của chúng ... –

+0

điều duy nhất nó làm cho tôi một số kết quả tốt là sử dụng sự kiện onInput thay vì onChange .... nhưng tôi không biết nếu nó sẽ mang lại tôi gặp nhiều vấn đề hơn. –

Trả lời

4

Thay đổi có lập trình giá trị của điều khiển biểu mẫu không kích hoạt trình xử lý thay đổi của nó, có thể do sự kiện change được xác định là xảy ra sau khi người dùng thay đổi giá trị và kiểm soát mất tiêu điểm. Các thay đổi có lập trình không tuân theo trình tự đó (lập trình lấy nét và làm mờ để bắt chước hành động của người dùng không giúp được gì, mặc dù sự kiện thay đổi có lập trình có thể được gửi đi trên phần tử).

HTML5 giới thiệu một input sự kiện mới mà cháy bất cứ khi nào một đầu vào nhận người dùng nhập vào:

<input id="i0" oninput="alert(this.value);" value=""> 

Bạn có thể sử dụng thay vì onchange, nhưng nó cháy trên mỗi phím nhấn và cũng nếu văn bản được dán hoặc kéo đến đầu vào. Tuy nhiên, hãy lưu ý rằng không trình duyệt nào hỗ trợ đầy đủ HTML5 (và có thể sẽ không bao giờ, vì đó là mục tiêu di chuyển), vì vậy bạn sẽ cần cung cấp tính năng thử nghiệm và cơ chế quay trở lại nếu sự kiện nhập không được hỗ trợ.

+0

Tôi nghĩ rằng sự kiện 'input' vẫn sẽ không kích hoạt trên một thay đổi đầu vào có lập trình, tôi nghĩ nó có nghĩa là một giải pháp cho nhu cầu theo dõi phát hiện đầu vào trường văn bản đang diễn ra mà không cần đến các sự kiện' keyup' 'keydown'. http://www.w3schools.com/html5/html5_ref_eventattributes.asp –

+0

Vâng, bạn nói đúng. W3Schools là một trang web rất bình thường, họ tuyên bố "onreset không được hỗ trợ trong HTML5". Hoàn toàn ngược lại, nó là một trong những thứ mà người dùng agensts phải hỗ trợ: [HTML5 onreset] (http://dev.w3.org/html5/spec-author-view/webappapis.html#event-handlers-on-elements- tài liệu-đối tượng-và-cửa sổ-đối tượng) – RobG

+0

Wow, tôi đã thực sự tìm kiếm một cái gì đó như danh sách này. Cảm ơn!! Tôi không biết nhưng có vẻ khá khó điều hướng và tìm kiếm thứ gì đó trong tài liệu đặc tả W3 ... –

0

Đầu vào cần tiêu điểm để onchange được kích hoạt. Đó thực sự là một điều tốt nếu lập trình thiết lập giá trị đầu vào không kích hoạt sự kiện onchange. Nó sẽ tạo ra một thiết lập hình tròn từ giữa đầu vào và mã.

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