Sto impostando il valore di un campo di testo data-ora tramite un widget calendario. Ovviamente, il widget calendario fa qualcosa del genere:
document.getElementById('datetimetext').value = date_value;
Quello che voglio è :
Cambiando il valore nel campo di testo datetimetext ho bisogno di resettare alcuni altri campi nella pagina. Ho aggiunto un ascoltatore di eventi onchange al campo datetimetext che non viene attivato, perché credo che onchange
venga attivato solo quando l'elemento ottiene il focus & il suo valore viene cambiato quando perde il focus.
Quindi sto cercando un modo per innescare manualmente questo evento onchange
(che credo dovrebbe occuparsi di controllare la differenza di valore nel campo di testo).
Qualche idea?
Ci sono un paio di modi per farlo. Se l'ascoltatore onchange
è una funzione impostata tramite la proprietà element.onchange
e non ti preoccupi dell'oggetto evento o del bubbling/propagazione, il metodo più semplice è chiamare semplicemente quella funzione:
element.onchange();
Se hai bisogno di simulare l'evento reale per intero, o se imposti l'evento tramite l'attributo html o addEventListener
/attachEvent
, devi fare un po' di rilevamento delle caratteristiche per sparare correttamente l'evento:
if ("createEvent" in document) {
var evt = document.createEvent("HTMLEvents");
evt.initEvent("change", false, true);
element.dispatchEvent(evt);
}
else
element.fireEvent("onchange");
MDN suggerisce che c'è un modo molto più pulito di farlo nei browser moderni:
// 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);