Wie kann ich programmatisch eine ausgewählte, damit es seine Onchange Verhalten ausgelöst?

StackOverflow https://stackoverflow.com/questions/1224728

  •  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.)

War es hilfreich?

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:

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top