Was ist die einfachste und beste Weg , um Trigger ändern Ereignis , wenn der Wert der Einstellung wählen Element.
Ich habe erwartet, dass der folgende Code ausgeführt wird
$('select#some').val(10);
oder
$('select#some').attr('value', 10);
würde dazu führen, dass das Änderungsereignis ausgelöst wird, was meiner Meinung nach ziemlich logisch ist. Richtig?
Nun, das ist nicht der Fall. Auf diese Weise müssen Sie das Ereignis change () auslösen
$('select#some').val(10).change();
oder
$('select#some').val(10).trigger('change');
aber ich suche nach einer Lösung, die ein Änderungsereignis auslösen würde, sobald der Wert von select durch einen Javascript-Code geändert wird.
Antworten:
Ich hatte ein sehr ähnliches Problem und bin mir nicht ganz sicher, womit Sie ein Problem haben, da Ihr vorgeschlagener Code für mich hervorragend funktioniert hat. Es löst sofort (eine Anforderung von Ihnen) den folgenden Änderungscode aus.
Dann nehme ich den Wert aus der Datenbank (dies wird in einem Formular sowohl für die neue Eingabe als auch für die Bearbeitung vorhandener Datensätze verwendet), setze ihn als ausgewählten Wert und füge das fehlende Teil hinzu, um den obigen Code auszulösen: ".change () ".
Wenn der vorhandene Wert aus der Datenbank 'N' ist, wird das sekundäre Eingabefeld in meinem Formular sofort ausgeblendet.
quelle
Eine Sache, die ich herausgefunden habe (auf die harte Tour), ist, dass Sie haben sollten
definiert, BEVOR Sie verwenden
oder
quelle
change()
bevor ich den Hörer definiert habe, und es hat nicht funktioniert, bis ich denchange()
Anruf unter den Hörer verschoben habe und es funktioniert hat. Nun, ich werde sagen, dass dies kein Problem sein sollte, es ist nur eine Frage der Art und Weise, wie Sie Ihren Code strukturieren.Die klare Antwort ist bereits in einer doppelten Frage enthalten: Warum wird das Ereignis jquery change nicht ausgelöst, wenn ich den Wert einer Auswahl mit val () festlege?
Wie Sie wahrscheinlich wissen, löst das Festlegen des Werts für select das Ereignis change () nicht aus. Wenn Sie nach einem Ereignis suchen, das ausgelöst wird, wenn der Wert eines Elements über JS geändert wurde, gibt es keines.
Wenn Sie dies wirklich tun möchten, besteht die einzige Möglichkeit darin, eine Funktion zu schreiben, die das DOM in einem Intervall überprüft und geänderte Werte verfolgt. Tun Sie dies jedoch definitiv nicht, es sei denn, Sie müssen (nicht sicher, warum Sie dies jemals tun müssten).
Diese Lösung wurde hinzugefügt:
Eine andere mögliche Lösung besteht darin, eine eigene
.val()
Wrapper-Funktion zu erstellen und nach dem Festlegen des Werts ein benutzerdefiniertes Ereignis auslösen zu lassen..val()
Wenn Sie dann den Wert eines .val () -Wrappers zum Festlegen eines Werts festlegen<select>
, wird Ihr benutzerdefiniertes Ereignis ausgelöst die Sie fangen und handhaben können.return this
Stellen Sie sicher , dass es in jQuery-Manier verkettbar istquelle
$('select').val(value).change()
funktioniert nicht die ganze Zeit? Irgendeine klare Erklärung?Ich trenne es und verwende dann einen Identitätsvergleich, um zu diktieren, was als nächstes getan wird.
quelle
Da jQuery kein natives Änderungsereignis auslöst, sondern nur ein eigenes Änderungsereignis. Wenn Sie ein Ereignis ohne jQuery binden und dann mit jQuery auslösen, werden die von Ihnen gebundenen Rückrufe nicht ausgeführt!
Die Lösung ist dann wie folgt (100% Arbeit):
quelle