¿Cómo puedo restablecer un formulario con el complemento elegido por jQuery?


80

Tengo un montón de selectelementos en un formulario con el que estoy usando el complemento Jquery Chosen . ¿Cómo puedo restablecer el formulario? Lo siguiente no funciona:

<input type="reset" />

2
Debe cambiar su respuesta aceptada a la respuesta de Jack O'Neill. Las otras soluciones ya no funcionan.
James

1
Cambie su respuesta aceptada por la respuesta de Jack O'Neill. porque el activador de la última versión ahora se llama: actualizado
Well Wisher

1
@Jame & Well wisher: No es que cambiemos todas las preguntas respondidas en este sitio cada vez que se actualiza un complemento. La solución era correcta en ese momento. RobertWaddell puso un comentario sobre la respuesta, creo que este es el camino a seguir.
GôTô

Respuestas:


188

Deberá restablecer el valor del campo, luego activar el liszt:updatedevento en la entrada para que se actualice, he hecho un violín con un ejemplo de trabajo aquí.

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

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

Desde el lanzamiento de la v1.0 elegida, el disparador ahora se llama 'elegido: actualizado'. Cualquiera que use esta nueva versión debe activar la actualización usando

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

15
¡Buena respuesta! Con la última versión de Chosen, debería ser "(" elegido: actualizado ")"
Robert Waddell

2
¡Gran respuesta! Pero, ¿es posible restablecer y volver a mostrar el marcador de posición original?
Niels Sønderbæk

1
Sigue sin funcionar. Estoy reemplazando dinámicamente mi selección a través de llamadas Ajax (método jQuery load ()). Luego, emitiendo un nuevo gatillo elegido (). ("Elegido: actualizado"); y no funciona. La búsqueda elegida aún no funciona en la nueva selección.
Marco Marsala

Cuando se usa esto para los campos de selección 'multiple: true', parece que también se elimina el marcador de posición. ¿Conoce alguna forma de conservar el marcador de posición después de la limpieza?
David Basalla

1
Creo que lo encontré ... $selectField.val([]).trigger('chosen:updated')parece hacer el truco
David Basalla

52

Desde el lanzamiento de la v1.0 elegida, el disparador ahora se llama 'elegido: actualizado'. Cualquiera que use esta nueva versión debe activar la actualización usando

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

1
Esta debería ser la respuesta correcta debido a los cambios. Ninguna de las otras soluciones que encontré funciona correctamente. ¡Gracias!
James

1
¡Pero no funciona! Si la selección se reemplaza dinámicamente con otra selección (método jQuery load ()) con el mismo id / nombre, la búsqueda deja de funcionar en la nueva selección. Intenté llamar a .chosen () en la nueva selección, llamar a .chosen ('destruir'), llamar a .trigger ("elegido: actualizado") y combinaciones de estos.
Marco Marsala

14

Puedes probar esto:

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

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

11

para que el reinicio funcione, naturalmente, use esto:

$("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
Usar form.reset () y luego activar elegido: actualizar es la mejor solución, especialmente si desea presentar el formulario como se mostró originalmente. Establecer .val ('') no devuelve el formulario a los valores predeterminados.
Just Plain High

Esto está funcionando. Recuerde restablecer manualmente los cuadros combinados (seleccionar) agregados dinámicamente al DOM.
Marco Marsala


0

Para un enfoque más sencillo ... asumiendo que sus entradas están dentro de las <form>etiquetas:

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

Esto es lo que haría:

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

Vea el violín aquí .


@MarcoMarsala si miras el violín, funciona. ¿En qué se diferencia tu código del violín?
prograhammer

1
Actualicé a 1.2.0 y todo comenzó a funcionar sin problemas. Ni siquiera necesitaba setTimeout. Probablemente fue un error en 1.12
Marco Marsala

0

Ninguna de las opciones anteriores me funciona. Tuve que hacerlo como en la vieja escuela, incluso usando javascript nativo, aquí está el código:

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

0

Ninguna de las respuestas aquí funcionó para mí. Estoy usando la selección elegida con el atributo múltiple. El botón normal para enviar formulario tampoco funcionó. Así que tuve una función para hacer esto al hacer clic.

//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

A veces, debe restablecer la selección que se solicitó.

hago esto

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

Y llama a esta función así, con las opciones como argumento

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

-2

En jQuery, algo como esto debería funcionar

<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 ("")}); no borra las etiquetas en el elegido
PH

@PH si pudiera darnos un ejemplo de su código para que lo ayudemos
MHowey

sottenad acaba de responder esto, por favor consulte su enlace jsfiddle arriba. ahora mi código se ve como $ j ('. chzn-select'). each (function () {$ j (this) .val (""). trigger ("liszt: updated");});
PH
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.