2017-01-25 3 views
0

Ich versuche, eine Auswahl zu implementieren, die eine Funktion aufruft, auch wenn dieselbe Option zweimal ausgewählt wird. Nach einer der Antworten auf diese thread, habe ich den selectedIndex auf -1 im Fokus gesetzt. Ich bekomme den Funktionsaufruf jedoch immer noch nicht, wenn dieselbe Option zweimal ausgewählt wird.HTML/Javascript - Wählen Sie dieselbe Option zweimal, indem Sie den ausgewählten Index onFocus setzen

var scaleSelect = new ComboBox({ 
     id: "scale_select", 
     style: {width: "150px"}, 
     name: "scale_select", 
     placeHolder: "Choisir une échelle", 
     store: scaleStore, 
     disabled: true, 
     onFocus: function() { 
     this.selectedIndex = -1; 
     console.log(this.selectedIndex); //-1 
     }, 
     onChange: function(value){ 
     mapScale = value; 
     window.myMap.setScale(mapScale); 
     } 
    }, "scale_select"); 
    scaleSelect.startup(); 

UPDATE Der Versuch, den ausgewählten Index innerhalb onChange festlegen noch die Funktion nicht nennen - fragen, ob dies mit der Tatsache zu tun hat, die ausgewählten Index onChange nicht definiert ..

var scaleSelect = new ComboBox({ 
     id: "scale_select", 
     style: {width: "150px"}, 
     name: "scale_select", 
     placeHolder: "Choisir une échelle", 
     store: scaleStore, 
     disabled: true, 
     onChange: function(value){ 
     mapScale = value; 
     window.myMap.setScale(mapScale); 
     var mySelect = document.getElementById("scale_select"); 
     console.log(this.selectedIndex) //undefined 
     this.selectedIndex = -1; 
     mySelect.selectedIndex = -1; 
     console.log(this.selectedIndex); //-1 
     console.log(mySelect.selectedIndex); //-1 
     } 
    }, "scale_select"); 
    scaleSelect.startup(); 
+0

Haben Sie versucht onclick anstelle onchange zu verwenden? – nixkuroi

+0

Es würde zu oft feuern, denke ich..ich müsste in diesem Fall einige Bedingungen hinzufügen. Ich sehe nicht, warum ich die Antwort in der verwandten Verbindung nicht anpassen kann. – user25976

+1

Sie konnten den Wert zurücksetzen und den Platzhaltertext aktualisieren, um es so aussehen zu lassen, als hätte es hartnäckige Selektionen – Chase

Antwort

0

Also ich denke, das Problem ist, dass, nachdem Sie einen Wert in der Auswahl ausgewählt haben, verliert es nicht den Fokus. Daher wird Ihr onFocus-Handler nur aufgerufen, wenn der Benutzer tatsächlich irgendwo anders auf der Seite klickt. Wenn sie das nicht tut, wird der Wert von select den onChange nicht auslösen, wenn sie denselben Wert erneut auswählt.

Also, anstatt den ausgewählten Index auf den Fokus zu setzen, warum nicht in OnChange, nachdem Sie die Änderung behandelt haben? Auf diese Weise wird Ihre Auswahl für eine weitere Auswahl vorbereitet, sobald Sie mit der Bearbeitung der aktuellen Auswahl fertig sind.

UPDATE

Ok, also im Dojo Code suchen, ist dies das Beste, was ich tun konnte:

var scaleSelect = new ComboBox({ 
    id: "scale_select", 
    style: {width: "150px"}, 
    name: "scale_select", 
    placeHolder: "Choisir une échelle", 
    store: scaleStore, 
    disabled: true, 
    onChange: function(value){ 
    if(value) { // the .reset() call below will fire the onChange handler again, but this time with a null value 
     mapScale = value; 
     window.myMap.setScale(mapScale); 
     console.log("Changed to", value, this); 
     this.reset(); // This is the magic here: reset so you are guaranteed to isseu an "onChange" the next time the user picks something 
    } 
    } 
}, "scale_select"); 
scaleSelect.startup(); 

Beachten Sie, dass Sie ohne Wert, die ganze Sache beginnen müssen - andernfalls gibt dieser Anfangswert kein "onChange" -Ereignis aus, und jedes Mal, wenn Sie das Widget zurücksetzen, wird es auf den Anfangswert zurückgesetzt ...

Hoffe, das hilft!

+0

Ihr Vorschlag macht durchaus Sinn, aber es scheint, als hätte die Einstellung selectedIndex -1 in onChange keinen Effekt auf onChange. Siehe Änderungen. – user25976

+0

Hmmm - was ist der Wert von "this" innerhalb des onChange-Handlers? Ist es das Auserwählte? Oder das ComboBox-Objekt? Sie sollten den selectedIndex-Wert von * select * festlegen - und Sie müssen die ComboBox möglicherweise auch über die neue Auswahl informieren. Oder es könnte eine Möglichkeit geben, der ComboBox direkt zu sagen, die Auswahl zurückzusetzen ... – MacPrawn

+0

Ich habe aktualisiert ... Ich glaube, ich habe verstanden, was du meintest. Immer noch kein Glück, aber wieder, nicht sicher, ob das, was Sie vorgeschlagen haben – user25976

0

Ich testete alle Dinge, die ich kannte, ohne Erfolg. Ich frage mich über den Thread, den Sie verlinkt haben und antwortet mit Upvotes! Der Grund ist, dass eine ausgewählte Option keine Option mehr ist. Aber ich habe einen Vorschlag:

Erstellen Sie Ihre eigenen wählen

Es ist nur eine Textbox und ein div unter, dass mit einigen Links Zeile für Zeile.

Verwandte Themen