2012-01-14 8 views
16

Che cosa significa quando l'attributo action è "#" (numero/simbolo/segno/carattere sterlina)?Che cosa significa quando l'attributo action form è "#" (numero/simbolo/segno/carattere sterlina)?

Cosa succede quando l'attributo formaction di un modulo di input è impostato su "#"? Ciò impedisce l'invio dell'input al server?

<form method="GET" action="example.php"> 
    <input type="text" size="20" name="text1" value="text1" formaction="#"/> 
    <input type="text" size="20" name="text2" value="text2"/> 
    <input type="submit" value="Submit"/> 
</form> 

risposta

10

Il significato di # come riferimento URL (sia come valore dell'attributo action o formaction o altro) è un riferimento all'inizio del documento di base corrente. Il documento di base è il documento corrente, a meno che non sia stato impostato un tag <base href=...>.

Ciò che succede dipende dalla situazione. In genere, il browser richiede nuovamente la pagina con una parte di query nell'URL (e la pagina viene caricata di nuovo, il che potrebbe implicare l'esecuzione di script sul lato client), ma se la stessa query è stata utilizzata in precedenza, il browser probabilmente utilizza la sua cache. Inoltre, quando si fa riferimento all'inizio del documento, il focus su qualsiasi elemento del modulo viene perso e la pagina potrebbe scorrere all'indietro.

Quindi anche se lo # è abbastanza comune in alcuni stili di codifica, non è affidabile; il suo scopo è raggiunto meglio usando i gestori di eventi lato client.

L'attributo formaction ha un significato solo per i pulsanti di invio. Un elemento di input del testo non costituisce un pulsante di invio, anche se può attivare l'invio del modulo, quindi qui l'attributo viene ignorato.

+0

Solo di passaggio: quando hai detto "è affidabile", intendevi "non è affidabile"? –

+0

@MattGibson, giusto, grazie, corretto. –

2

Il modulo verrà inviato a se stesso (URL corrente). Penso che sia la stessa azione vuota.

Inoltre, può essere utile se l'azione verrà modificata da javascript in un secondo momento.

1

spiegato sulla w3schools: http://www.w3schools.com/html5/html5_form_attributes.asp

Modulo prevalgono sugli attributi

Gli attributi forma di esclusione vi permettono di sovrascrivere alcuni dei attributi impostati per l'elemento modulo.

Gli attributi forma di override sono:

FormAction - Sovrascrive l'attributo action forma
formenctype - Esegue l'override attributo form enctype
formmethod - sostituisce il metodo modulo attributo
formnovalidate - sovrascrive l'attributo form novalidate
formtarget - Esegue l'override dell'attributo di destinazione del modulo
Nota: gli attributi di sovrascrittura del modulo funzionano con quanto segue tipi:
invio e immagine.

<form action="demo_form.asp" method="get" id="user_form"> 
E-mail: <input type="email" name="userid" /><br /> 
<input type="submit" value="Submit" /> 
<br /> 
<input type="submit" formaction="demo_admin.asp" value="Submit as admin" /> 
<br /> 
<input type="submit" formnovalidate="true" 
value="Submit without validation" /> 
<br /> 
</form> 

Quindi sì, si è assolutamente corretto che si sostituisce l'azione, ma ha la precedenza solo dal tipo di ingresso presentare e l'immagine, non sul testo. Quindi puoi avere 2 diversi pulsanti di invio nella stessa forma, ma possono portare a diversi tipi di validazione. Questo è quello che userei per.

Quindi uno # posizionerebbe l'azione sulla stessa pagina anziché su un'altra.