2016-12-06 3 views
0

Verwenden von Select2 v4.0.3.Wie kann man feststellen, wenn Select2 den aktuell ausgewählten Wert nicht sichtbar anzeigt?

Bei Verwendung eines "Formularwiederherstellungs" Addons in Firefox (zB "Lazarus") werden alle Werte in einem Formular festgelegt, benutzerdefinierte Steuerelemente wie Select2 werden jedoch nicht über eine Änderung benachrichtigt. Daher kann es manchmal zu einer Diskrepanz zwischen dem tatsächlich ausgewählten SELECT-Wert und der Anzeige von Select2 kommen.

Also würde ich regelmäßig alle Select2 Kontrollen überprüfen, um sicherzustellen, dass ihr sichtbarer Status genau ist.

Ich habe versucht, wie diese Überprüfung:

if (sel.select2("val") != sel.val()) { sel.select2("change"); } // needs an update

aber die Werte sind immer die gleichen, die „val“ Methode angibt, ist nicht das, was die select2 Kontrolle ist sichtbar zeigt, was es gerade denkt es zeigt.

Mit welcher Methode kann ich mit Select2 überprüfen, ob der sichtbare Status nicht mit dem tatsächlich ausgewählten Wert übereinstimmt?

+0

@ ingredient_15939 Geige es so wird eine klare Idee bekommen. – Santhucool

+0

sel.select2 ("val") gibt ein Array von id/text-Objekten zurück, wobei sel.val() eine Zeichenfolge zurückgibt. – Bindrid

Antwort

0

Ich würde versuchen, so etwas wie dieses

// assuming sel is already defined. 
var sel2 = sel.select2("val") 
if(sel2 and sel2.length >){ 
    if(sel2[0].id != sel.val()) { 
     sel.trigger("change"); 
    } 
} 
else { 
    // nothing is selected so trigger change to resync 
    sel.trigger("change"); 
} 

Wo ich ähnlichen Code verwendet, um dieses, ich habe die sel.on schon hatte ("... definiert ändern, so auf den Auslöser habe ich einen zweiten Parameter‚resync‘ den registrierten Handler zu sagen, nichts zu tun, das so aussah.

sel.on("change", function(evt, status) { 
    if(status != "resync") { 
     // rest of the code 

    } 

}); 

dann habe ich es auslösen wie diese

sel.trigger("change", "resync"); 

oder Sie können einfach nur faul sein und das Ereignis blind auslösen, ohne die Resynchronisierung zu überprüfen.

sel.trigger("change"); 

Die Auswahl an Handler sollte den Rest erledigen.

Verwandte Themen