2011-01-20 9 views
8

Ho una pagina JSP come segue:html differenza modulo di partecipazione tra il click(), presentare() e manuale scatto in 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> 

Quando clicco manualmente (ad esempio utilizzando un mouse) sul pulsante "Vai" , il modulo viene inviato dopo la visualizzazione del testo "now starting submit"; quando si fa clic sul pulsante "TestClick", il modulo viene inviato correttamente ma non viene visualizzato il testo "Inizia ora l'invio"; quando si fa clic sul pulsante "TestSubmit", viene visualizzato il testo "now starting submit", ma il modulo non viene inviato affatto.

Contrariamente alle mie aspettative, i pulsanti "TestClick" e "TestSubmit" non funzionano come fa il pulsante "Vai" quando si fa clic su entrambi. A mio modo di vedere, i tre clic sui pulsanti dovrebbero fare la stessa cosa, cioè inviare il modulo dopo che è stato visualizzato il testo "now starting submit". Quindi la mia domanda è: perché i risultati dei tre clic sui pulsanti sono diversi?

Sto utilizzando jQuery 1.3.2

+0

È necessario attivare tutte le richiamate.Hai provato proprio questo con il jquery più recente per vedere se forse l'hanno riparato? – scragz

+0

@scragz, non ho provato con 1.4.4. e si comporta allo stesso modo. –

risposta

5

Il secondo pulsante non presenta sotto forma a causa di un bug in jQuery (o il DOM), che fa sì che il metodo submit a fallire se il presentare id del pulsante è "invia". Vedi: http://bugs.jquery.com/ticket/1414

+1

+1 per questo. Ho già avuto a che fare con quell'errore prima, ed è stato un vero dolore al collo. Mi ci è voluto un giorno per capire che tutto quello che dovevo fare era cambiare "invia" a "Invia". Basta cambiare la custodia per fare il trucco! – jmort253

6

Sembra che il gestore di eventi jQuery presentare sta ottenendo ignorato quando si imposta manualmente il modulo di inviare tramite $ ('# TestForm') submit().;

Questo dovrebbe funzionare nel gestore di clic:

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

aggiornamento:

  1. realtà come richardml ha detto che il primo problema che hai è un Bug jQuery quindi prima cosa è rinominare lo id dell'invio a qualcos'altro.

  2. secondo problema è la type del test1btninput che dovrebbe essere type="submit" al fine di comportarsi come un normale pulsante di invio.

Il trucco è quello di cambiare il tipo sul passaggio del mouse, in modo che il codice sarà simile a questa:

$(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(); 
    }); 
}); 

Il resto funziona come previsto.

speranza questo aiuto

0

si dovrebbe utilizzare l'evento onSubmit per attivare la funzione invece.

questo attiverà il foo() ogni volta che si invia il modulo sia utilizzando il pulsante di invio o il metodo submit().