Wie kann ich ein Formular mit dem von jQuery ausgewählten Plugin zurücksetzen?


79

Ich habe eine Reihe von selectElementen in einer Form, mit der ich das Jquery Chosen-Plugin verwende . Wie kann ich das Formular zurücksetzen? Folgendes funktioniert nicht:

<input type="reset" />

2
Sie sollten Ihre akzeptierte Antwort in Jack O'Neills Antwort ändern. Die anderen Lösungen funktionieren nicht mehr.
James

1
Bitte ändern Sie Ihre akzeptierte Antwort in Jack O'Neill Antwort. weil der neueste Versionsauslöser jetzt heißt: aktualisiert
Well Wisher

1
@ James & Well Wisher: Es ist nicht so, dass wir alle beantworteten Fragen auf dieser Site ändern, wenn ein Plugin aktualisiert wird. Die Lösung war zu der Zeit korrekt. RobertWaddell hat die Antwort kommentiert. Ich glaube, das ist der richtige Weg.
GôTô

Antworten:


187

Sie müssen den Wert des Feldes zurücksetzen und dann das liszt:updatedEreignis an der Eingabe auslösen , damit es aktualisiert wird. Ich habe hier mit einem funktionierenden Beispiel herumgespielt.

http://jsfiddle.net/VSpa3/3/

$(".chzn-select").chosen();
$('a').click(function(){
    $(".chzn-select").val('').trigger("liszt:updated");
});​

Seit der Veröffentlichung von gewähltem v1.0 heißt der Trigger nun 'gewählt: aktualisiert'. Jeder, der diese neue Version verwendet, muss das Update mit auslösen

$(".chosen-select").val('').trigger("chosen:updated");

15
Gute Antwort! Mit der neuesten Version von Chosen sollte dies "(" ausgewählt: aktualisiert ")" sein
Robert Waddell

2
Gute Antwort! Aber ist es möglich, den ursprünglichen Platzhalter zurückzusetzen und wieder anzuzeigen?
Niels Sønderbæk

1
Funktioniert immer noch nicht. Ich ersetze meine Auswahl dynamisch über Ajax-Aufrufe (jQuery load () -Methode). Dann wird ein neu gewählter (). Trigger ausgegeben ("ausgewählt: aktualisiert"); und funktioniert nicht. Die gewählte Suche funktioniert bei der neuen Auswahl immer noch nicht.
Marco Marsala

Wenn Sie dies für 'multiple: true'-Auswahlfelder verwenden, wird anscheinend auch der Platzhalter entfernt. Kennen Sie eine Möglichkeit, den Platzhalter nach dem Löschen beizubehalten?
David Basalla

1
Ah denke, ich habe es gefunden ... $selectField.val([]).trigger('chosen:updated')scheint den Trick zu tun
David Basalla

52

Seit der Veröffentlichung von gewähltem v1.0 heißt der Trigger nun 'gewählt: aktualisiert'. Jeder, der diese neue Version verwendet, muss das Update mit auslösen

$(".chosen-select").val('').trigger("chosen:updated");

1
Dies sollte aufgrund der Änderungen die richtige Antwort sein. Keine der anderen Lösungen, die ich gefunden habe, funktioniert richtig. Vielen Dank!
James

1
Aber nicht arbeiten! Wenn die Auswahl durch eine andere Auswahl (jQuery load () -Methode) mit derselben ID / demselben Namen ersetzt wird, funktioniert die Suche nicht mehr mit der neuen Auswahl. Es wurde versucht, .chosen () für die neue Auswahl aufzurufen, .chosen ('destroy') aufzurufen, .trigger ("ausgewählt: aktualisiert") und Kombinationen davon aufzurufen.
Marco Marsala

14

Sie könnten dies versuchen:

$('select').chosen('destroy');  

$('select').prop("selectedIndex", -1);   
$('select').chosen();

11

Verwenden Sie Folgendes, um das Zurücksetzen auf natürliche Weise zu ermöglichen:

$("input[type='reset'], button[type='reset']").click(function(e){
    e.preventDefault();

    var form = $(this).closest('form').get(0);
    form.reset();

    $(form).find('select').each(function(i, v) {
        $(v).trigger('chosen:updated');
    });
}

1
Verwenden Sie form.reset () und lösen Sie dann ausgewählt aus: update ist die beste Lösung, insbesondere wenn Sie das Formular so präsentieren möchten, wie es ursprünglich angezeigt wurde. Durch Festlegen von .val ('') wird das Formular nicht auf die Standardwerte zurückgesetzt.
Just Plain High

Das funktioniert. Denken Sie daran, Comboboxen manuell zurückzusetzen (auswählen), die dem DOM dynamisch hinzugefügt wurden.
Marco Marsala


0

Für einen stressfreien Ansatz ... vorausgesetzt, Ihre Eingaben befinden sich in <form>Tags:

<form>
    <!-- your selects go here and any other input fields -->
    <input type="reset" value="Reset"> 
</form>

Das würde ich tun:

$("input[type='reset'], button[type='reset']").click(function(e){
      setTimeout(function(){ $("select").trigger("chosen:updated"); }, 50);
});

Siehe Geige hier .


@MarcoMarsala Wenn Sie sich die Geige ansehen, funktioniert es. Wie unterscheidet sich Ihr Code von der Geige?
Programmierer

1
Ich habe auf 1.2.0 aktualisiert und alle haben ohne Probleme angefangen zu arbeiten. Ich brauchte nicht einmal das setTimeout. Wahrscheinlich war ein Fehler in 1.12
Marco Marsala

0

Keine der vorherigen Optionen funktioniert für mich. Ich musste es wie in der alten Schule machen, sogar mit einheimischem Javascript. Hier ist der Code:

$('#dllSample option').each(function(){
     $(this)[0].selected = false;   
});
$("#dllSample").trigger("chosen:updated");

0

Keine der Antworten hier hat bei mir funktioniert. Ich benutze ausgewählte Auswahl mit dem Mehrfachattribut. Die normale Schaltfläche zum Senden eines Formulars hat den Trick ebenfalls nicht ausgeführt. Also hatte ich gerade eine Funktion, die dies beim Klicken tat.

//Gets the selected values
var selected = [];
    for (var option of document.getElementById('mySelect').options) {
        if (option.selected) {
            selected.push(option.value);
        }

    }

//Resets the form
document.getElementById('form1').reset();

//Chosen values doesnt get reset, so we do this manually
//Removes the values selected by clicking on the x icon
$link = $('a.search-choice-close');
            var i;
            for (i = 0; i < selected.length; i++) {
                $link[i].click();
            }

-1

Manchmal müssen Sie die ausgewählte Auswahl zurücksetzen, die aufgerufen wird.

Ich mache das

jQuery.fn.chosen_reset = function(n){
  $(this).chosen('destroy');
  $(this).prop('selectedIndex', 0);
  $(this).chosen(n)
}

Rufen Sie diese Funktion so auf, mit den Optionen als Argument

$('select').chosen_reset({width:'369px'});

-2

In jQuery sollte so etwas funktionieren

<input name="Text1" id="something" type="text">

<input type="reset" id="reset_me"/>


$("#reset_me").click(function() { 
$("#something").val("");
});

$ j ('. chzn-select'). each (function () {$ j (this) .val ("")}); löscht nicht die Tags in der gewählten
PH

@ PH, wenn Sie ein Beispiel Ihres Codes für uns geben könnten, um zu helfen
MHowey

sottenad hat dies gerade beantwortet, bitte verweisen Sie auf seinen jsfiddle-Link oben. jetzt sieht mein Code aus wie $ j ('. chzn-select'). each (function () {$ j (this) .val (""). trigger ("liszt: aktualisiert");});
PH
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.