2012-02-19 8 views
97

¿Cómo evito que una forma de presentar usando jQuery?usando jQuery - la prevención de la forma de presentación de

He intentado todo - ver 3 diferentes opciones que probé a continuación, pero todo no va a funcionar:

$(document).ready(function() { 

      //option A 
      $("#form").submit(function(e){ 
       e.preventDefault(); 
      }); 

      //option B 
      $("#form").submit(function(e){ 
       stopEvent(e); 
      }); 

      //option C 
      $("#form").submit(function(){ 
       return false; 
      }); 
    }); 

Qué podría estar mal?

Actualización - aquí está mi html:

<form id="form" class="form" action="page2.php" method="post"> 
     <!-- tags in the form --> 
     <p class="class2"> 
      <input type="submit" value="Okay!" /> 
     </p> 
    </form> 

¿Hay algo mal aquí?

+0

Muestre su HTML porque no hay no hay nada malo con preventDefault o devuelve falso como lo publicaste, aparte de que tu selector está totalmente equivocado. – Sparky

+0

'return false;' después de que '.submit()' funcionó para mí! Estaba teniendo el mismo problema –

Respuesta

141

Dos cosas se destacan:

  • Es posible que su nombre de la forma no es form. Más bien, consulte la etiqueta soltando el #.
  • También el e.preventDefault es la sintaxis JQuery correcta, por ejemplo,

    //option A 
        $("form").submit(function(e){ 
         e.preventDefault(); 
        }); 
    

Opción C también debería funcionar. No estoy familiarizado con la opción B

Un ejemplo completo:

<html> 
    <head> 
     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 

     <script type='text/javascript'> 
     $(document).ready(function() { 
      //option A 
      $("form").submit(function(e){ 
       alert('submit intercepted'); 
       e.preventDefault(e); 
      }); 
     }); 
     </script> 
    </head> 

    <body> 
     <form action="http://google.com" method="GET"> 
      Search <input type='text' name='q' /> 
      <input type='submit'/> 
     </form> 
    </body> 
</html> 
+1

Lo intenté, todavía enviando el formulario ... :( –

+2

Algo más está mal. Estoy usando esta técnica a diario. Lo mejor es que haya errores de JavaScript en la página, tal vez con FireBug? –

+0

No veo ningún error en Firebug :( –

10

Para prevant default/impedir el envío de formularios utiliza

e.preventDefault(); 

Para detener evento bubling uso

e.stopPropagation(); 

Para evitar el envío de formularios 'return false' debería funcionar también.

+0

Lo intenté, todavía se envía ... –

+3

¿Qué es bubling? –

+0

Consulte esta respuesta porque jQuery maneja esto de manera diferente. http://stackoverflow.com/questions/1357118/event-preventdefault-vs-return-false – Sparky

0

$("#form') busca a un elemento con id="form".

$('form') busca el elemento de formulario

3

También tuve el mismo problema. También intenté con lo que habías probado. Luego cambio mi método para no usar jquery pero usando el atributo "onsubmit" en la etiqueta del formulario.

<form onsubmit="thefunction(); return false;"> 

Funciona.

Pero, cuando traté de poner el valor de retorno falsa sólo en "theFunction()", que no impide el proceso de sometimiento, por lo que debe poner "return false;" en el atributo onsubmit. Entonces, concluyo que mi aplicación de formulario no puede obtener el valor de retorno de la función Javascript. No tengo ninguna idea al respecto.

14

es probable que tenga pocas formas o la página y el uso de $ ('forma'). Submit() añade este evento a la primera aparición de la forma en su página.Usar selector de clase en su lugar, o intente esto:

$('form').each(function(){ 
    $(this).submit(function(){ 
     e.preventDefault(); 
     alert('it works!'); 
     return false; 
    }) 
}) 

o mejor versión de la misma:

$(document).on("submit", "form", function(e){ 
    e.preventDefault(); 
    alert('it works!'); 
    return false; 
}); 
+1

En mi caso, devolver la clave fue falso. – artificis

0

olvida el formulario de identificación, y funciona

$('form#form').submit(function(e){ 
    e.preventDefault(); 
    alert('prevent submit');    
}); 
2

que tenía el mismo problema y lo resolví de esta manera (no es elegante, pero funciona):

$('#form').attr('onsubmit','return false;'); 

Y tiene la ventaja, en mi opinión, que puede revertir la situación en cualquier momento que desee:

$('#form').attr('onsubmit','return true;'); 
+0

Quizás sería un poco más cómodo eliminar el atributo al revertir el formulario de prevención de envío '$ ('# formulario'). RemoveAttr ('onsubmit') ; ' – barbieswimcrew

0

Cuando utilizo <form> etiqueta sin el atributo id="form" y llamarlo por su nombre de la etiqueta directamente en jQuery funciona conmigo
su código en el archivo html:

<form action="page2.php" method="post"> 

y con caracteres de Jquery:

$(document).ready(function() { 
     $('form').submit(function(evt){ 
      evt.preventDefault();// to stop form submitting 
     }); 
}); 
Cuestiones relacionadas