Borrar campos de formulario con jQuery


402

Quiero borrar todos los campos de entrada y área de texto en un formulario. Funciona de la siguiente manera cuando se usa un botón de entrada con la resetclase:

$(".reset").bind("click", function() {
  $("input[type=text], textarea").val("");
});

Esto borrará todos los campos de la página, no solo los del formulario. ¿Cómo se vería mi selector solo para la forma en que vive el botón de reinicio real?



2
Método más detallado para restablecer un formulario aquí .
Uzbekjon

Respuestas:


487
$(".reset").click(function() {
    $(this).closest('form').find("input[type=text], textarea").val("");
});

49
No olvides tus input[type=password]campos.
SammyK

64
Esta respuesta cubre la pregunta original. Aquellos que quieran más que solo campos de texto obviamente necesitarán agregar código según sea necesario ...
ShaneBlake

2
También recuerde que habrá más tipos de entradas que no sean type = password (como dijo SammyK) en HTML5: type = url, type = digits, type = email, etc. http://www.w3.org/TR/html5/forms .html # estados-del-tipo-atributo
Gabriel

66
Un pequeño consejo: este selector no seleccionará elementos de entrada que dependan del tipo = texto implícito, debe incluir explícitamente el tipo = texto en su marcado. Eso puede ser obvio, pero no lo fue para mí, justo ahora :-)
Elbin

2
@CaptSaltyJack: Eso los restablece a los valores predeterminados, que no es lo mismo que
borrarlos

628

Para jQuery 1.6+ :

$(':input','#myform')
  .not(':button, :submit, :reset, :hidden')
  .val('')
  .prop('checked', false)
  .prop('selected', false);

Para jQuery <1.6 :

$(':input','#myform')
  .not(':button, :submit, :reset, :hidden')
  .val('')
  .removeAttr('checked')
  .removeAttr('selected');

Consulte esta publicación: restablecer un formulario de varias etapas con jQuery

O

$('#myform')[0].reset();

Como jQuery sugiere :

Para recuperar y cambiar las propiedades DOM, como el checked, selectedo el disabledestado de los elementos de formulario, use el método .prop () .


3
El primer fragmento de código establecerá los valores de las casillas de verificación en "" en lugar de simplemente desmarcarlos. Y no afectará las selecciones, porque son las etiquetas de opción las que se seleccionan.

66
para evitar la eliminación de los valores de casilla de verificación, he utilizado la siguiente, inspirada en su respuesta: $(':input').not(':button, :submit, :reset, :hidden').removeAttr('checked').removeAttr('selected').not(':checkbox, select').val('').removeAttr('value');. Eliminará los valores predeterminados (es decir value="something", pero no para casillas de verificación o selecciones.)
Jeppe Mariager-Lam

17
NO USE ESTE (opción 1) si tiene radios, casillas de verificación o selecciones, perderá mucho tiempo encontrando un error extraño después de que desaparezcan sus valores. La versión correcta, que deja sus valores intactos: $(':input').not(':button, :submit, :reset, :hidden').removeAttr('checked').removeAttr('selected').not(':checkbox, :radio, select').val('');(basado en el comentario de Jeppe Mariager-Lam)
Konstantin Pereiaslov

8
¿Alguna razón para evitar la segunda opción?
rineez

66
su segunda solución es la respuesta real
abzarak

159

¿Alguna razón por la que esto no debería usarse?

$("#form").trigger('reset');

17
@ pythonian29033: y con su enfoque, restablecerá TODOS los formularios de la página a los valores predeterminados ... que definitivamente NO es lo que un desarrollador normal quiere. Creo que un desarrollador de jQuery debería tener en cuenta el hecho de que necesita cambiar el selector de un código de ejemplo al apropiado ...
Sk8erPeter

8
@ Sk8erPeter Si tiene varios elementos en la página con ID form, lo está haciendo mal. Tendría razón si el selector fuera form, pero es más bien el selector de ID #form.
brandones

@brandones: Deberías haber prestado atención a lo que estabas respondiendo, porque estás equivocado ... :) Comprueba el código que escribió pythonian29033 (al que respondí anteriormente): $("form").trigger('reset');realmente desencadena el evento "reset" en TODOS los <form>elementos. En la mayoría de los casos, puede estar equivocado. Pero $("#form").trigger('reset');(se muestra en la respuesta original) solo activa el evento "reset" en el elemento que tiene el conjunto de id "formulario" (accesible con el #formselector). Y sí, una identificación debe usarse solo una vez, es por eso que la llaman "identificación", porque identifica un elemento de manera inequívoca.
Sk8erPeter

61

Esto no manejará casos en los que los campos de entrada de formulario tengan valores predeterminados no vacíos.

Algo así debería funcionar

$('yourdiv').find('form')[0].reset();

Solo tengo el código js de mi primera publicación y quiero que funcione en cada página con varios botones de reinicio en varias formas. Entonces, es solo el selector que necesita alguna contribución.
tbuehlmann

51

si usa selectores y hace que los valores estén vacíos, no está restableciendo el formulario, está haciendo que todos los campos estén vacíos. Restablecer es hacer el formulario como estaba antes de cualquier acción de edición del usuario después de la carga del formulario desde el lado del servidor. Si hay una entrada con el nombre "nombre de usuario" y ese nombre de usuario se completó previamente desde el lado del servidor, la mayoría de las soluciones en esta página eliminarán ese valor de la entrada, no lo restablecerán al valor que tenía antes de los cambios del usuario. Si necesita restablecer el formulario, use esto:

$('#myform')[0].reset();

si no necesita restablecer el formulario, pero completa todas las entradas con algún valor, por ejemplo, un valor vacío, puede usar la mayoría de las soluciones de otros comentarios.


29

Simple pero funciona como un encanto.

$("#form").trigger('reset'); //jquery
document.getElementById("myform").reset(); //native JS

14
Excepto que no borra los campos. Los establece a sus valores predeterminados.
Mark Fraser

29

Si alguien todavía está leyendo este hilo, esta es la solución más simple usando no jQuery, sino JavaScript simple. Si sus campos de entrada están dentro de un formulario, hay un simple comando de reinicio de JavaScript:

document.getElementById("myform").reset();

Más sobre esto aquí: http://www.w3schools.com/jsref/met_form_reset.asp

¡Salud!


Como dice. Se restablece al valor de la forma inicial y no vacía los valores. Pero sí, si ha cargado el formulario con valores predeterminados, no se borrarán. Probablemente un bucle JS que atraviesa todas las entradas y las borra
Tarmo Saluste


17

¿Por qué debe hacerse con JavaScript?

<form>
    <!-- snip -->
    <input type="reset" value="Reset"/>
</form>

http://www.w3.org/TR/html5/the-input-element.html#attr-input-type-keywords


Intenté eso primero, no borrará los campos con valores predeterminados.

Aquí hay una manera de hacerlo con jQuery, entonces:

$('.reset').on('click', function() {
    $(this).closest('form').find('input[type=text], textarea').val('');
});

1
Intenté eso primero, no borrará los campos con valores predeterminados.
tbuehlmann

Hay otra razón por la que a menudo necesitas JavaScript para este. El formulario puede no ser un "formulario" en absoluto. Por ejemplo, su formulario es realmente solo una colección de entradas para una aplicación Backbone.js / Ember.js / AngularJS y los datos nunca se enviarán como un formulario tradicional al servidor, sino que deben procesarse estrictamente con el lado del cliente de JavaScript. En casos como este, no hay forma de restablecer para trabajar.
John Munsch

3
.live()está en desuso y también es lento / innecesario. Podrías usar .bind()o .on().
Kevin Beal

14

Si desea vaciar todos los cuadros de entrada independientemente de su tipo, entonces es un minuto paso a paso.

 $('#MyFormId')[0].reset();

12

Obtuve el truco más fácil para restablecer el formulario

jQuery("#review-form")[0].reset();

o

$("#review-form").get().reset();

12

Con Javascript puedes simplemente hacerlo con esta sintaxis getElementById("your-form-id").reset();

también puede usar jquery llamando a la función de reinicio de esta manera $('#your-form-id')[0].reset();

Recuerda no olvidar [0]. Recibirá el siguiente error si

TypeError: $ (...). Reset no es una función

JQuery también proporciona un evento que puede usar

$ ('# form_id'). trigger ("reset");

Lo intenté y funciona.

Nota: Es importante tener en cuenta que estos métodos solo restablecen su formulario a su valor inicial establecido por el servidor en la carga de la página. Esto significa que si su entrada se configuró en el valor 'valor establecido' antes de realizar un cambio aleatorio, el campo se restablecerá a ese mismo valor después de que se llame al método de restablecimiento.

Espero eso ayude


7
$('#editPOIForm').each(function(){ 
    this.reset();
});

¿Dónde editPOIFormestá el idatributo de su formulario?


2
Solo habrá uno, #editPOIFormpor lo que el .each()método no tiene sentido. Incluso si agrega esta identificación a varios formularios, solo devolvería uno de ellos.
Kevin Beal

1
El each () le permite usar esto (en lugar de $ (this)) para llegar al objeto DOM subyacente y llamar a reset (). Suponiendo que desea restablecer los valores predeterminados, en lugar de borrar todo, esta es una buena solución.
Dave

@Dave Might también podría usar$('#editPOIForm').get(0).reset();
Thomas Daugaard

2
@ThomasDaugaard: excepto que si usa get (0) o simplemente $ ('# editPOIForm') [0] obtendrá un error de script si $ ('# editPOIForm') no coincide con ningún elemento, mientras que cada () fallará sin un error. Así que supongo que depende de sus prioridades en lo que respecta al manejo de errores.
Dave

6

¿Por qué no lo usas document.getElementById("myId").reset();? este es el sencillo y bonito


6

Código probado y verificado:

  $( document ).ready(function() {
    $('#messageForm').submit(function(e){
       e.preventDefault();
    });
    $('#send').click(function(e){
      $("#messageForm")[0].reset();
    });
  });

Javascript debe estar incluido $(document).readyy debe estar con su lógica.


5

La solución más fácil y mejor es:
$("#form")[0].reset();

No lo uses aquí -
$(this)[0].reset();


Solo una pequeña advertencia: si tiene valores predeterminados para las entradas, digamos procesadas por el servidor, form.reset();se restablecerán a esos valores y no se borrarán las entradas.
Evil_Bengt

4

Digamos si desea borrar los campos y, excepto el tipo de cuenta, en el cuadro desplegable de tiempo medio se restablecerá a un valor particular, es decir, 'Todos'. Los campos restantes se deben restablecer a vacío, es decir, cuadro de texto. Este enfoque se utilizará para borrar Campos particulares como nuestro requisito.

 $(':input').not('#accountType').each( function() {

    if(this.type=='text' || this.type=='textarea'){
             this.value = '';
       }
    else if(this.type=='radio' || this.type=='checkbox'){
         this.checked=false;
      }
         else if(this.type=='select-one' || this.type=='select-multiple'){
              this.value ='All';
     }
 });

La respuesta más completa. Gracias.
RationalRabbit

Una pregunta: ¿cómo dirigiría esto a un formulario específico si lo estuviera haciendo mediante programación, en lugar de hacer clic en un botón?
RationalRabbit


3

Use este código donde desee llamar a la función de restablecimiento normal mediante jQuery

setTimeout("reset_form()",2000);

Y escriba esta función fuera del sitio jQuery en Document Ready

<script>
function reset_form()
{
    var fm=document.getElementById('form1');
    fm.reset();
}
</script>

3

Algunos de ustedes se quejaron de que las radios y demás están libres del estado "marcado" predeterminado ... Todo lo que tiene que hacer es agregar los selectores: radio,: checkbox al .not y el problema se resuelve.

Si no puede hacer que todas las demás funciones de reinicio funcionen, esta sí lo hará.

  • Adaptado de la respuesta de ngen

    function form_reset(formID){
        $(':input','#'+formID)
        .not(':button',':submit',':reset',':hidden',':radio',':checkbox')
        .val('');
    }

2
@using (Ajax.BeginForm("Create", "AcceptanceQualityDefect", new AjaxOptions()
{
    OnSuccess = "ClearInput",
    HttpMethod = "Post",
    UpdateTargetId = "defect-list",
    InsertionMode = InsertionMode.Replace
}, new { @id = "frmID" })) 
  1. frmID es la identificación del formulario
  2. OnSuccessde la operación llamamos a la función JavaScript con el nombre " ClearInput"

    <script type="text/javascript">
        function ClearInput() {
            //call action for render create view
            $("#frmID").get(0).reset();
        }
    </script>
  3. si haces ambas cosas bien, entonces no podrás evitar que funcione ...


1

El siguiente código borra todo el formulario y sus campos estarán vacíos. Si desea borrar solo un formulario en particular si la página tiene más de un formulario, mencione la identificación o clase del formulario

$("body").find('form').find('input,  textarea').val('');

0

Si quiero borrar todos los campos excepto accountType..Utilice lo siguiente

$q(':input','#myform').not('#accountType').val('').removeAttr('checked').removeAttr('selected');

1
no desea perder los valores de las casillas de verificación en los botones de radio, pero solo desactívelos, esta no es una buena solución
Frankey

0

El código que veo aquí y en preguntas SO relacionadas parece incompleto.

Restablecer un formulario significa establecer los valores originales del HTML, por lo que armé esto para un pequeño proyecto que estaba haciendo según el código anterior:

            $(':input', this)
                .not(':button, :submit, :reset, :hidden')
                .each(function(i,e) {
                    $(e).val($(e).attr('value') || '')
                        .prop('checked',  false)
                        .prop('selected', false)
                })

            $('option[selected]', this).prop('selected', true)
            $('input[checked]',   this).prop('checked',  true)
            $('textarea',         this).each(function(i,e) { $(e).val($(e).html()) })

Avíseme si me falta algo o algo que pueda mejorarse.


0

Ninguno de los anteriores funciona en un caso simple cuando la página incluye una llamada al control del usuario web que involucra el procesamiento de solicitudes IHttpHandler (captcha). Después de enviar la solicitud (para el procesamiento de imágenes), el siguiente código no borra los campos del formulario (antes de enviar la solicitud HttpHandler) todo funciona correctamente.

<input type="reset"  value="ClearAllFields" onclick="ClearContact()" />

 <script type="text/javascript">
       function ClearContact() {
           ("form :text").val("");
       }
    </script>

0

He escrito un complemento universal de jQuery:

/**
 * Resets any input field or form
 */
$.fn.uReset = function () {
    return this.filter('form, :input').each(function () {
        var input = $(this);
        
        // Reset the form.
        if (input.is('form')) {
            input[0].reset();
            return;
        }

        // Reset any form field.
        if (input.is(':radio, :checkbox')) {
            input.prop('checked', this.defaultChecked);
        } else if (input.is('select')) {
            input.find('option').each(function () {
                $(this).prop('selected', this.defaultSelected);
            });
        } else if (this.defaultValue) {
            input.val(this.defaultValue);
        } else {
            console.log('Cannot reset to default value');
        }
    });
};

$(function () {
    // Test jQuery plugin.
    $('button').click(function (e) {
        e.preventDefault();
        
        var button = $(this),
            inputType = button.val(),
            form = button.closest('form');
        
        if (inputType === 'form') {
            form.uReset()
        } else {
            $('input[type=' + inputType + '], ' + inputType, form).uReset();
        }
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<h3>Form</h3>
<form>
    <input type="text" value="default"/><br /><br />
    Ch 1 (default checked) <input type="checkbox" name="color" value="1" checked="checked" /><br />
    Ch 2 <input type="checkbox" name="color" value="2" /><br />
    Ch 3 (default checked) <input type="checkbox" name="color" value="3" checked="checked" /><br /><br />
    <select name="time"><br />
        <option value="15">15</option>
        <option selected="selected" value="30">30</option>
        <option value="45">45</option>
    </select><br /><br />
    R 1 <input type="radio" name="color" value="1" /><br />
    R 2 (default checked) <input type="radio" name="color" value="2" checked="checked" /><br />
    R 3 <input type="radio" name="color" value="3" /><br /><br />
    <textarea>Default text</textarea><br /><br />
    
    <p>Play with form values and then try to reset them</p>
    
    <button type="button" value="text">Reset text input</button>
    <button type="button" value="checkbox">Reset checkboxes</button>
    <button type="button" value="select">Reset select</button>
    <button type="button" value="radio">Reset radios</button>
    <button type="button" value="textarea">Reset textarea</button>
    <button type="button" value="form">Reset the Form</button>
</form>


-2

Agregue el botón de reinicio oculto de la siguiente manera

<input id="resetBtn" type="reset" value="reset" style="display:none" />
// Call reset buttons click event
// Similar to ClearInputs('resetBtn');
function ClearInputs(btnSelector) {
     var btn = $("#" + btnSelector);
     btn.click();
}

-4

$ ('formulario'). submit (function () {

var el = $(this);

$('<button type="reset" style="display:none; "></button>')
    .appendTo(el)
    .click()
    .remove()
;

return false;

});

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.