2011-08-14 39 views
9

Tôi có văn bản đầu vào nhận giá trị của mình từ một hàm javascript (bộ hẹn giờ có đếm ngược).sự kiện trao đổi không kích hoạt khi thay đổi đến từ một chức năng khác

Tôi muốn tăng sự kiện khi văn bản đầu vào bằng 0, vì vậy tôi đang sử dụng eventListener thay đổi.

tiếc là dường như không có sự kiện nào xảy ra khi thay đổi đến từ hàm javascript.

Làm cách nào để bắt buộc sự kiện thay đổi hoạt động, ngay cả khi thay đổi đến từ javascript chứ không phải từ người dùng?

Nhờ sự giúp đỡ

Trả lời

13

Từ fine manual:

thay đổi
Các sự kiện thay đổi xảy ra khi một điều khiển mất tập trung đầu vào và giá trị của nó đã được sửa đổi kể từ khi đạt được trọng tâm. Sự kiện này hợp lệ cho INPUT, SELECT và TEXTAREA. thành phần.

Khi bạn sửa đổi giá trị của đầu vào văn bản thông qua mã, sự kiện thay đổi sẽ không được kích hoạt do không có thay đổi tiêu điểm. Bạn có thể kích hoạt các sự kiện chính mình mặc dù với createEventdispatchEvent, ví dụ:

el = document.getElementById('x'); 
ev = document.createEvent('Event'); 
ev.initEvent('change', true, false); 
el.dispatchEvent(ev); 

Và một phiên bản sống: http://jsfiddle.net/ambiguous/nH8CH/

+2

Điều này sẽ không hoạt động nếu bạn sử dụng bất kỳ phương pháp nghe sự kiện hiện đại nào; nó sẽ chỉ hoạt động nếu bạn sử dụng thuộc tính 'onchange' cũ. Bạn nên sử dụng API sự kiện DOM để kích hoạt sự kiện. –

+0

@Delan: Bạn có thể nói rằng tôi đã không thực hiện JavaScript thô trong một thời gian dài? Tôi sẽ vá nó. –

+0

Cảm ơn rất nhiều! Điều này rất đơn giản và làm việc tuyệt vời! :) – marverix

3

Trong chức năng thay đổi giá trị, bằng tay bắn một sự kiện change.

var e = document.createEvent('HTMLEvents'); 
e.initEvent('change', false, false); 
some_input_element.dispatchEvent(e); 
+0

Liệu nó cần phải được 'HTMLEvents '? Phiên bản jQuery dường như sử dụng 'Event' và sự khác biệt duy nhất tôi có thể thấy là DOM cấp 2 so với cấp 3. –

+0

Theo như tôi biết,' HTMLEvents', 'Event' và' Events' là đồng nghĩa. –

+0

['Event'] (http://www.w3.org/TR/DOM-Level-3-Events/#events-Event) có vẻ là quan điểm chính thức,' Sự kiện' có thể nằm trong một số trình duyệt để khớp sự đa nguyên 'hasFeature'. –

1

Một lựa chọn tái sử dụng hơn:

function simulate_event(eventName, element) { 
    // You could set this into the prototype as a method. 
    var event; 

    if (document.createEvent) { 
     event = document.createEvent("HTMLEvents"); 
     event.initEvent(eventName, true, true); 
    } else { 
     event = document.createEventObject(); 
     event.eventType = eventName; 
    }; 

    event.eventName = eventName; 

    if (document.createEvent) { 
     element.dispatchEvent(event); 
    } else { 
     element.fireEvent("on" + event.eventName, event); 
    } 
}; 
Các vấn đề liên quan