2011-01-20 17 views
8

tengo una página JSP de la siguiente manera:html diferencia formulario de presentación entre el clic(), enviar() y haga clic con el manual de jQuery

<script type="text/javascript" src="/mywebapp/js/jquery.js"></script> 
<script type="text/javascript">   
$(function() { 
    $('#testform').submit(function(){ 
    alert('now starting submit'); 
    return true; 
    }); 

    $("#test1btn").click(function(){ 
    $('#testform #submit').click();  
    }); 
    $("#test2btn").click(function(){ 
    $('#testform').submit();  
    }); 
});  
</script> 
<form id="testform" method="post" action="backend/search_test.do"> 
<input id="reqpagenr" name="reqpagenr" size="10"> 
<input type="button" id="test1btn" value="TestClick"/> 
<input type="button" id="test2btn" value="TestSubmit"/> 
<input id="submit" type="submit" value="Go"> 
</form> 

Cuando hago clic manualmente (es decir, utilizando un ratón) en el botón "Go" , el formulario se envía después de mostrar el texto "ahora comenzando a enviar"; al hacer clic en el botón "TestClick", el formulario se envió correctamente pero el texto "ahora comenzando a enviar" no aparece; al hacer clic en el botón "TestSubmit", aparece el texto "ahora comenzando a enviar", pero el formulario no se envía.

Contrariamente a mis expectativas, los botones "TestClick" y "TestSubmit" no funcionan como el botón "Ir" hace cuando se hace clic en ambos. En mi entender, los tres clics de botón deberían hacer lo mismo, es decir, enviar el formulario después de que aparezca el texto "ahora comenzando a enviar". Entonces mi pregunta es, ¿por qué los resultados de los tres clics de botón son diferentes?

estoy usando jQuery 1.3.2

+0

Se supone que debe activar todas las devoluciones de llamada.¿Has intentado eso con el jquery más nuevo para ver si lo arreglaron? – scragz

+0

@scragz, no, lo intenté con 1.4.4. y se comporta de la misma manera. –

Respuesta

5

El segundo botón no envíe el formulario debido a un error en jQuery (o el DOM), que hace que el método submit a fallar si el presente Identificación del botón es 'enviar'. Ver: http://bugs.jquery.com/ticket/1414

+1

+1 para esto. Personalmente he lidiado con ese error antes, y fue un verdadero dolor en el cuello. Me llevó mucho tiempo darme cuenta de que todo lo que tenía que hacer era cambiar "enviar" a "Enviar". ¡Solo cambiar el estuche fue suficiente para hacer el truco! – jmort253

6

Parece que el controlador de eventos de jQuery es conseguir presentar ignorado al configurar manualmente el formulario de envío a través de $ ('# TestForm') presente (.);

Esto debería funcionar en el controlador de clic:

$('#testform').trigger("submit") 
1

Actualizado:

  1. realmente tan richardml dijo que el primer problema que se tiene es un insecto de jQuery por lo que primero Lo importante es cambiar el nombre del id del envío a otra cosa.

  2. segundo problema es el de la typetest1btninput que debe ser type="submit" con el fin de comportarse como un botón normal de presentar.

El truco es cambiar el tipo de cursor del mouse, así que el código se verá así:

$(function() { 
    $('#testform').submit(function() { 
     alert('now starting submit'); 
    }); 
    //TestClick 
    $('#test1btn').hover(function() { 
     $(this)[0].setAttribute('type', 'submit'); 
    },function() { 
     $(this)[0].setAttribute('type', 'button'); 
    }); 
    //TestSubmit 
    $('#test2btn').click(function() { 
     $('#testform').submit(); 
    }); 
}); 

El resto está funcionando como se esperaba.

esperanza esta ayuda

0

usted debe utilizar el evento onsubmit para activar la función de lugar.

<form id="testform" method="post" onsubmit="foo()" action="backend/search_test.do"> 

esto desencadenará la foo() cada vez que se envía el formulario ya sea utilizando el botón de envío o presentados por el método().

Cuestiones relacionadas