Frage

Ich scheine nicht in der Lage, richtig das Ereignis onchange heften sich an ein dijit.form.Select Widget. Aber ich bin neu in Web-Entwicklung, so konnte ich etwas völlig idiotisch tun (obwohl, wie gut ich kann sagen (und ich habe alle Dokumente lesen die ich finden konnte) Ich bin nicht). Ich habe den Körper Klasse entspricht dem Dojo Thema Sicher, dass ich dojo.require () für alle Widgets ich (und dojo.parser), und nach wie vor, nada. Der Code Ich verwende ist:

dojo.addOnLoad(function () {
    var _query = dojo.query('.toggle');
    for (var i in  _query) {
        dojo.connect(_query[i], 'onchange', function (ev) {
            console.log(ev + ' fired onchange');
        });
    }
});

Jede Hilfe bei allen sehr geschätzt wird.

Die Zugabe: Nach mehr in die Interna der Graben wie dijit macht Widgets, ich Discoverd, dass, wenn ich die dojoType hinzufügen = ‚dijit.form.Select‘ Attribut-Wert-Paar zu meinem html-Element (das deklarativ tun), dijit macht eigentlich eine ein-Reihe zwei-col Tabelle. Die erste Element der Tabelle ist eine Spanne (mit der Klasse dijitSelectLabel), dass ich gerade zeigt das gewählte (oder Standard) Element geh mal davon aus. Es ist das zweite Element erscheint ein Knopf als ein nach unten, die schaltet die Anzeige der Menü itmes in Reaktion auf bestimmte DOM-Ereignisse Pfeil gemacht werden. Auch (und ich dachte, das war ziemlich raffinierte), dijit Platz nicht wirklich um die Auswahlmöglichkeiten in der DOM-Struktur, bis eines dieser Ereignisse ausgelöst wird. Ich schaute auf den HTML-Code in Firebug direkt nach einem frischen Pageload (bevor ich auf etwas geklickt haben), und die zweite Option ist nicht überall zu finden sind. Dann, wenn ich auf die Pfeiltaste klicken, dann ist es ein dijit.Menu widget, dijit Sticks ein dijit.Menu bis zum Ende des Körperknoten; nachdem ich woanders klicken, wird das Menü-Widget noch die lastchild Körper ist, seine jetzt nur versteckt und nicht an der form.Select Widget.

Sollte es wirklich so kompliziert sein, wenn alles, was ich tun möchte, ist Platz ein anderes dijit.form Widget im Baum DOM je nachdem, welche Artikel der Benutzer auswählt?

Fazit: Stellt sich heraus, es war eine Kapitalisierung Problem.

dojo.connect(widget_obj, 'onChange', function_obj);
works, während

dojo.connect(widget_obj, 'onchange', function_obj);
doesn't.
So war ich richtig, dass ich ganz dumm wurde. Ich nahm an, weil die alle Kleinbuchstaben Version funktioniert, wenn in sie ein HTML-Tag als Attribut setzen platzieren, dass Dojo wäre es das gleiche behandeln. Es macht Sinn, weil dijit.form.Select kein .onchange Attribut hat, aber ein .onChange Attribut hat. (I endete mit einem .Select über einen .FilteringSelect ragte weil ich nicht meine Nutzer einen Eindruck zu geben, dass sie in etwas eingeben können.) Also, die man von euch gebe ich die Antwort auf (weil Sie beide onChange in Ihrer Nachricht benutzt hatte, ich glaube, ich war einfach zu unerfahren zu erkennen, dass der Fall von Bedeutung)?

War es hilfreich?

Lösung

Versuchen Sie, die folgenden, wenn ein dojo.connect tun:

  var inputEvents = [];  //Global var

  inputEvents.push(dojo.connect(dijit.byId(inputFldStr), "onChange", eventFuncObj));

Speichern Sie die Verbindung in einem globalen var.

Andere Tipps

Für alle andere Seite über eine Web-Suche zu finden, können Sie den gleichen Fehler gemacht haben, ich habe .. Kopie-Einfügen Markup, so dass jeweils den gleichen ‚Wert‘.

z.

<select dojoType='dijit.form.Select' onChange="fn">
<option value='foo'>Foo 1</option>
<option value='foo'>Foo 2</option>
<option value='foo'>Foo 3</option>
</select>

fn () wird nie, weil die Änderung Handler Code überprüft der neue Wert gegenüber dem zuvor ausgewählten Wert aufgerufen werden und wird nicht ausgelöst onChange es sei denn, es verändert hat.

In Ihrem Code verbinden Sie einen Handler 'onchange' Ereignis von DOM-Knoten, nicht Dojo-Widgets. dojo.query kehren Sie ein NodeList Objekt -. eine Sammlung von Knoten, die der Abfrage entsprechen
In diesem Fall ist es zuverlässiger ein Widgets ‚onChange‘ Ereignis zu verbinden, wie GoinOff zeigte. Nur ein wenig neben seiner Antwort, um sicherzustellen, werden Sie dieses Recht tun
Angenommen, dies ist Ihre HTML (in späteren Versionen von Dojo dijit.form.Select hat mit dijit.form.FilteringSelect ersetzt worden).

<input dojoType="dijit.form.FilteringSelect" id="stateInput" store="stateStore" searchAttr="name" name="state"/>

Dann würden Sie eine Verbindung zu ‚onChange‘ auf diese Weise (Sie können auch speichern Sie die Verbindung in einigen Array der Lage sein, um es später zu trennen, wie GoinOff vorgeschlagen):

dojo.addOnLoad (function () {
   dojo.connect(dijit.byId("stateInput"), "onChange", function(){});
}

Aber es ist eine andere Geschichte, wenn Sie nicht wissen, Ihre Widgets ID und wollen mehrere Widgets verwenden dojo.query zu verbinden.

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