2017-06-13 40 views
9

Tôi đã tạo một chỉ thị để làm việc với các tệp. Khi tôi thay đổi các tập tin hoặc chọn một cái mới mà tôi gọi mã này:Thay đổi sự kiện được gọi khi thay đổi giá trị phần tử IE 11/Angular

element.val('');

tôi đang làm điều này để có thể loại bỏ các tập tin được lựa chọn và chọn giống nhau sau đó. Nếu tôi không làm điều này, khi tôi xóa tệp đã chọn và chọn lại một lần nữa, thì sự kiện change sẽ không được gọi và tôi không thể làm những gì tôi cần làm.

Tôi chỉ cần biết liệu có cách nào tránh IE gọi sự kiện thay đổi khi tôi thay đổi giá trị của đầu vào hay không.

tôi đã tìm kiếm một chút và tìm thấy ý kiến ​​như thế này:

The onchange event on textboxes and textarea elements only fires when the element loses focus, and if its value is now other than its value when it got focus.

Vì vậy, sự kiện thay đổi này không phải được gọi khi tôi chỉ cần thay đổi giá trị de programatically.

Bất kỳ ý tưởng nào?

EDIT:

Tôi đã tạo một jsfiddle với behaviour

Trả lời

6

Dường như element.val('') phát ra một sự kiện mới change, gây nhiều cuộc gọi đến người nghe của bạn. Điều đó nói rằng, bạn có thể tránh hành vi lạ này bằng cách kiểm tra giá trị đầu vào như sau:

element.bind('change', function(){ 
    if(!element.val()) { 
     return; 
    } 
    element.val(''); 
    // code goes here 
}); 
+2

Tôi khuyên bạn nên sử dụng ['on'] (http://api.jquery.com/on/) thay vì 'bind'. – Renan

+0

element.bind không được dùng nữa, thay vào đó sử dụng trên(). – fernandoocf

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