Θέτω μια τιμή πεδίου κειμένου ημερομηνίας-ώρας μέσω ενός widget ημερολογίου. Προφανώς, το widget ημερολογίου κάνει κάτι τέτοιο :
document.getElementById('datetimetext').value = date_value;
Αυτό που θέλω είναι :
Με την αλλαγή της τιμής στο πεδίο κειμένου date-time πρέπει να μηδενίσω κάποια άλλα πεδία της σελίδας. I've added a onchange event listener to the datetimetext field which is not getting triggered, because I guess onchange
gets triggered only when the element gets focus &? its value is changed on losing focus.
Ως εκ τούτου, ψάχνω για έναν τρόπο να ενεργοποιήσω χειροκίνητα αυτό το συμβάν onchange
(το οποίο υποθέτω ότι θα πρέπει να αναλάβει τον έλεγχο της διαφοράς τιμής στο πεδίο κειμένου).
Καμία ιδέα ?
Υπάρχουν δύο τρόποι για να το κάνετε αυτό. Εάν ο ακροατής onchange
είναι μια συνάρτηση που ορίζεται μέσω της ιδιότητας element.onchange
και δεν σας απασχολεί το αντικείμενο συμβάντος ή το bubbling/propagation, η ευκολότερη μέθοδος είναι να καλέσετε απλώς αυτή τη συνάρτηση:
element.onchange();
Αν θέλετε να προσομοιώνει πλήρως το πραγματικό συμβάν, ή αν ορίσετε το συμβάν μέσω της ιδιότητας html ή του addEventListener
/attachEvent
, θα πρέπει να κάνετε μια μικρή ανίχνευση της ιδιότητας για να πυροδοτήσετε σωστά το συμβάν:
if ("createEvent" in document) {
var evt = document.createEvent("HTMLEvents");
evt.initEvent("change", false, true);
element.dispatchEvent(evt);
}
else
element.fireEvent("onchange");
MDN υποδεικνύει ότι υπάρχει ένας πολύ πιο καθαρός τρόπος για να γίνει αυτό στα σύγχρονα προγράμματα περιήγησης:
// Assuming we're listening for e.g. a 'change' event on `element`
// Create a new 'change' event
var event = new Event('change');
// Dispatch it.
element.dispatchEvent(event);