Utilizzare un collegamento normale per inviare un modulo


130

Voglio inviare un modulo Ma non sto andando nel modo base di utilizzare un pulsante di input con tipo di invio ma un collegamento.

L'immagine sotto mostra il perché. Sto usando i collegamenti alle immagini per salvare / inviare il modulo. Perché ho markup CSS standard per i collegamenti di immagini non voglio usare i pulsanti di invio input.

Ho provato ad applicare onClick = "document.formName.submit ()" sull'elemento a ma preferirei un metodo html.

testo alternativo

Qualche idea?


3
usa il pulsante e css per visualizzare l'immagine o usare javascript, non esiste un modo reale per rendere semplice l'invio di un modulo senza javascript.
Anton S,

secondo, purtroppo non è un modo semplice senza javascript
benhowdle89

4
La tua ragione per farlo sembra una falsa economia. Meglio inventarsi un css standard per i pulsanti di invio e usare i moduli nel modo in cui sono stati progettati per essere utilizzati. Ci sono un mucchio di tecniche di css di pulsanti descritte qui: tripwiremagazine.com/2009/06/…
dnagirl

Risposte:


169

Due strade. O crea un pulsante e lo stile in modo che appaia come un collegamento con CSS, o creare un collegamento e utilizzare onclick="this.closest('form').submit();return false;".


55
Aaaaaaaand ecco un riferimento su come assegnare uno stile a un pulsante come link: stackoverflow.com/questions/1367409/…
lavagna a fogli mobili

3
nota che form.submit()non funzionerà senza JavaScript
baptx l'

3
@baptx anche i vecchi smartphone hanno abilitato javascript
Mahdi Jazini il

2
@MahdiJazini molte persone disabilitano JavaScript per impostazione predefinita, il che può essere invadente e influire sulle prestazioni in alcuni casi. Se JavaScript non riesce, può interrompere l'intero sito Web (ad es. L'utilizzo di un CDN senza fallback locale e il dominio di terze parti viene bloccato). Se si verifica un errore HTML, è comunque possibile utilizzare il sito Web. Gli sviluppatori dovrebbero invece seguire il principio del miglioramento progressivo.
Baptx,

3
Se vuoi supportare gli utenti senza javascript, fai la prima opzione descritta in questa risposta, dai stile a un pulsante come un link. Ad esempio input[type=submit].link { border: none; background: none; display: inline; color: blue; text-decoration: underline; }e<input type=submit class="link" />
Jan Sverre,

87

Non puoi davvero farlo senza una qualche forma di scripting al meglio delle mie conoscenze.

<form id="my_form">
<!-- Your Form -->    
<a href="javascript:{}" onclick="document.getElementById('my_form').submit(); return false;">submit</a>
</form>

Esempio da qui .


1
e cari visitatori ... non dimenticate di impostare >>> id = "my_form" non è un nome: D
Mahdi Jazini,

Questa dovrebbe essere la risposta migliore ed esplicita, grazie!
yehanny,

28

Solo uno stile input type="submit"come questo ha funzionato per me:

.link-button { 
     background: none;
     border: none;
     color: #0066ff;
     text-decoration: underline;
     cursor: pointer; 
}
<input type="submit" class="link-button" />

Testato su Chrome, IE 7-9, Firefox


solo per la cronaca: dovresti selezionare l' inputelemento appropriato usando i selettori CSS senza associare una classe all'elemento HTML.
Erik Kaplun,

Sebbene il tuo commento sia il modo preferito, questo non è sempre possibile
Serj Sagan

Perché è quello il modo preferito?
Segna il

È una pratica di codifica semi consolidata, generalmente lascia dietro di sé un html più pulito ... ma non è un grosso problema
Serj Sagan,

1
Questa risposta non dipende neanche da JavaScript, che è un'altra cosa di cui preoccuparsi
Matthew Lock,


5

uso:

<input type="image" src=".."/>

o:

<button type="send"><img src=".."/> + any html code</button>

più alcuni CSS


0

Sicuramente, non esiste una soluzione con HTML puro per inviare un modulo con un link (a tag ). L'HTML standard accetta solo pulsanti o immagini. Come hanno affermato alcuni altri collaboratori, è possibile simulare l'aspetto di un collegamento utilizzando un pulsante, ma immagino che non sia lo scopo della domanda.

IMHO, credo che la soluzione proposta e accettata non funzioni.

L'ho provato su un modulo e il browser non ha trovato il riferimento al modulo.

Quindi è possibile risolverlo usando una singola riga di JavaScript, usando thisobject, che fa riferimento all'elemento su cui si fa clic, che è un nodo figlio del modulo, che deve essere inviato. Così this.parentNodeè il nodo del modulo. Dopo sta solo chiamando il submit()metodo in quel modulo. Non è necessaria alcuna ricerca dall'intero documento per trovare la forma giusta.

<form action="http://www.greatsolutions.com.br/indexint.htm"                   
   method="get">
    <h3> Enter your name</h3>
    First Name <input type="text"  name="fname"  size="30"><br>
    Last Name <input type="text" name="lname" size="30"><br>
    <a href="#" onclick="this.parentNode.submit();"> Submit here</a>
</form>

Supponi di inserire con il mio nome:

Modulo compilato

Ho usato l' getattributo del metodo del modulo perché è possibile visualizzare i parametri corretti nell'URL nella pagina caricata dopo l'invio.

http://www.greatsolutions.com.br/indexint.htm?fname=Paulo&lname=Buchsbaum

Questa soluzione ovviamente si applica a qualsiasi tag che accetta l' onclickevento o qualche evento simile.

thisè una scelta eccellente per ripristinare il contesto insieme alla eventvariabile (disponibile in tutti i principali browser e IE9 in poi) che può essere utilizzata direttamente o passata come argomento a una funzione.

In questo caso, sostituire la riga con atag con la riga in basso, utilizzando la proprietà target, che indica l'elemento che ha avviato l'evento.

<a href="#" onclick="event.target.parentNode.submit();"> Submit here</a>

@Nathan, non ho molta pratica di scrivere Stackoverflow. Spero che le tue correzioni mi aiutino a migliorare il mio stile. Anche il mio inglese non è buono.
Paulo Buchsbaum

0

puoi utilizzare OnClick = "document.getElementById ('formID_NOT_NAME'). SUBMIT ()"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.