martedì 14 luglio 2009

Explorer e gli input type="image"

Oggi ho risolto una piccola cazzata che voglio condividere con la moltitudine dei miei lettori:
in caso di

<:input type="image" onclick="form.submit()" />

Firefox e safari faranno un solo submit, explorer 2, uno via javascript e l'altro dovuto all'input.
Avendo lavorato parecchio in Ajax, mi è nota la pericolosità dell'onclick sui bottoni che normalmente fanno il submit.

Infatti in questo caso l'effetto dell'operazione è il medesimo, ma spesso capita di fare questo "trucco": sull'onclick cerco di fare tutto via javascript e ajax. Se per qualche motivo il browser non supporta js, seguirà il corso normale effettuando il submit del form in stile classico "web 1.0", permettendo comunque la fruizione del sito web. Finezza che troppo poche volte vedo implementata.
Ma tornando al discorso, il trucco funziona solo se l'onclick termina con un "return false".. come per l'onsubmit dell'elemento form.. se la validazione js fallisce bisogna forzare un return false, altrimenti il browser pensa di poter andare avanti tranquillamente.. quindi la riga che ho messo sopra è diventata:

<:input type="image" onclick="form.submit();return false;" />

Il fatto è che si trattava di un sito di e-commerce e rappresentava il form in cui si mette il numero che si vuole acquistare di un determinato prodotto.. il risultato è che inserire 1 e cliccare sul tasto su firefox e safari faceva mettere 1 elemento nel carrello, mentre con IE ci finivano 2 prodotti, derivanti dal doppio submit.. io l'avrei lasciato così, d'altra parte se usi Explorer.. :)

2 commenti:

marco ha detto...

ciao!!! Ho il tuo stesso identico problema...ma scusami se lo script che voglio far partire sta nella stessa pagina del form come faccio?

nel form ho messo

form action="" method="post" name="module" id="module"

e nel bottone

input type="image" src="_beta-immagini/submit-reg-hover.gif" onclick="module.submit();return false;" border="0" name="action" /

ma non mi funziona niente di niente...cioè vorrei che semplicemente mi partisse questo

if(isset($_POST['action']) ){
// codice
}

come devo fare?Puoi aiutare quest anima che sta diventando proprio matta?????? :-D


ps: webking2003@libero.it

Shatsar ha detto...

Mah, visto così direi più che il tuo problema è che stai facendo il submit da javascript di un form che non ha l'action (action=""), quindi l'indirizzo a cui inviare il form..