2010-12-11 5 views
44

Quando si compila un'area di testo di un modulo, il comportamento predefinito quando viene premuto il tasto Invio è quello di passare alla riga successiva. Come posso modificare il comportamento del modulo in modo che possa essere inviato al momento di inserire l'utente anche quando l'utente si trova in una textarea?Come inviare un modulo al momento dell'inserimento quando la textarea è attiva?

Ho usato Firebug per il checkout Stack   textage di overflow textarea (che ha questo comportamento), ma non è stato possibile visualizzare alcun JavaScript che abbia ottenuto questo effetto. C'è un modo per cambiare il comportamento della textarea senza usare JavaScript?

+3

E se rinominiamo questa domanda a "presentare il modulo on entrare quando in textarea"? –

risposta

95

Non è possibile farlo senza JavaScript. Stackoverflow utilizza la libreria JavaScript jQuery che allega le funzioni agli elementi HTML al caricamento della pagina.

Ecco come si potrebbe fare con base JavaScript:

<textarea onkeydown="if (event.keyCode == 13) { this.form.submit(); return false; }"></textarea> 

KeyCode 13 è il tasto Invio.

Ecco come si potrebbe fare con jQuery come come fa StackOverflow:

<textarea class="commentarea"></textarea> 

con

$(document).ready(function() { 
    $('.commentarea').keydown(function(event) { 
     if (event.keyCode == 13) { 
      this.form.submit(); 
      return false; 
     } 
    }); 
}); 
+11

Poiché gli utenti hanno più familiarità con le azioni quando rilasciano la chiave, è una pratica migliore usare onkeyup o keyup() invece di keydown(). –

+0

Bella spiegazione. @Eric Fortis - buon punto su onkeyup. – andrew

+0

Scriverò una funzione e la inserirò nel mio file delle funzioni del modulo per cercare di mantenere pulito il codice. – andrew

4
<form id="myform"> 
    <input type="textbox" id="field"/> 
    <input type="button" value="submit"> 
</form> 

<script> 
    $(function() { 
     $("#field").keyup(function (event) { 
      if (event.which === 13) { 
       document.myform.submit(); 
      } 
     } 
    }); 
</script> 
+0

Si noti che la parte rilevante dell'HTML è l'ID, ho usato una casella di testo ma può essere qualsiasi tag a cui si desidera associare il comportamento. Anche per la leggibilità preferisco invocare il modulo tramite il suo ID come mostrato, questo è molto utile specialmente se si hanno più moduli nel codice. –

+0

nice, non sto pianificando di imparare jquery al momento però. Preferisco scrivere la funzione da solo perché poi ho la possibilità di praticare la scrittura javascript – andrew

5

Perché vuoi inviare una textarea quando premi Invio?

Un input "testo" verrà inviato per impostazione predefinita quando si preme invio. È un ingresso a linea singola.

<input type="text" value="..."> 

Una "area di testo" non lo è, in quanto beneficia di capacità multi-linea. L'invio su invio porta via alcuni di questi vantaggi.

<textarea name="area"></textarea> 

è possibile aggiungere codice JavaScript per rilevare la pressione del tasto entrare e auto-invia, ma si può essere meglio utilizzare un input di testo.

+1

Perché voglio una casella di input multilinea e voglio che l'utente sia in grado di inviare premendo enter. Ho intenzione di eliminare completamente il pulsante di invio. Penso che SO dovrebbe sbarazzarsi del loro pulsante Aggiungi commento se hanno intenzione di consentire che il commento venga inviato quando viene premuto il tasto Invio – andrew

Problemi correlati