Wie kann ich programmatisch eine ausgewählte, damit es seine Onchange Verhalten ausgelöst?
-
22-07-2019 - |
Frage
Dies scheint nicht zu funktionieren:
<select id="mySel" onchange="alert('foo')">
<option value="a">a</option>
<option value="b">b</option>
</select>
<script>
dojo.byId('mySel').value = 'b'; // select changes, but nothing is alerted
</script>
(Ich verwende Dojo, aber das ist nicht wirklich wichtig.)
Lösung
Der ‚onchange‘ Name ist ein wenig irreführend, wenn Sie, dass eine Änderung verstehen Ereignis und ein Wert geändert werden, sind nicht das Gleiche. Ein Änderungsereignis tritt auf, wenn der Benutzer den Wert im Browser ändert. Ich glaube, dass Sie das Ereignis manuell durch den Aufruf dojo.byId('mySel').onchange()
abfeuern kann, nachdem Sie programmatisch ändern Sie den Wert, though. (Möglicherweise müssen Sie tatsächlich eine Funktion definieren, alert
nennt, though. Ich habe dies selbst nicht getan.)
Andere Tipps
Dies wird den Wert ändern, aber nicht das onchange-Ereignis ausgelöst. Jedes Mal, wenn Sie ein Element ändern mit JavaScript wird es nicht das Ereignis ausgelöst (hält Sie davon ab, in Rekursion Fragen *).
Wenn Sie einen Event-Handler wie so einrichten.
function myHandler(){
//do whatever stuff here
changeColor( dojo.byId('mySel') );
}
, dann können Sie diese separat aufrufen, nachdem Sie den Wert programmatisch festgelegt.
Hinweis (*):. Ich bin kein Experte Dojo ... so habe ich vorausgesetzt, sie nicht „hinzugefügt“, um den automatischen Aufruf der Event-Handler, wenn Sie den Wert von JavaScript gesetzt
Sie können einen Blick auf diese Fragen und ihre Antworten nehmen: sie helfen könnten:
- programmatische Änderungen auf einem HTML-Auswahlbox erkennen.
- Wie programmatisch ich eine Onchange zwingen Ereignis an einem Eingang? (konzentrierte sich auf Eingabe, und nicht wählen, aber vielleicht noch nützlich sein)
Für alle, das change
Ereignis mit Hilfe von Javascript auslösen.
var evObj = document.createEvent("HTMLEvents");
evObj.initEvent("change", true, true);
var elem = document.getElementById('some-id');
elem.dispatchEvent(evObj);
können Sie das Ereignis zugreifen ‚onpropertychange‘ es eine Eigenschaft innerhalb des Ereignisarguments enthält zu identifizieren, welche Eigenschaft geändert wurde.
Es erkennt sowohl 'selectedIndex' und 'Wert' Änderungen - einfach Fall test 'Eigenschaftsname'
<select id="mySel" onpropertychange="dothis(event);">
<option value="a">a</option>
<option value="b">b</option>
</select>
function dothis(event)
{
if (event.propertyName == "selectedIndex")
alert('selection changed');
}
aus der Spitze von meinem Kopf ... (derzeit den asp.net js-Framework, die ganz anders ist abit)
Versuchen selectedIndex Zuordnung statt.