Ho una pagina Web dinamica con JS. C'è uno area di testo e un Invia pulsante, ma non modulo tag. Come faccio Invia pulsante di fuoco e la textarea ottenere eliminato quando Enter viene premuto nel textarea?Invio di dati da textarea premendo "Invio"
risposta
È possibile utilizzare un gestore keyup per l'area di testo (sebbene io sconsiglierei di farlo *).
[SomeTextarea].onkeyup = function(e){
e = e || event;
if (e.keyCode === 13) {
// start your submit function
}
return true;
}
* Perché non utilizzare un campo di immissione testo per questo? Textarea è particolarmente adatto per input multilinea, un campo di immissione testo per input a linea singola. Con un gestore di inserimento si cripta l'input multilinea. Ricordo di averlo usato una sola volta per un'applicazione di chat XHR (aka AJAX) (quindi la textarea si comportava come un'area di input per MSN), ma ha riattivato l'input multiline usando il tasto di invio CTRL per le nuove linee. Potrebbe essere un'idea per te? L'ascoltatore sarebbe estesa in questo modo:
[SomeTextarea].onkeyup = function(e){
e = e || event;
if (e.keyCode === 13 && !e.ctrlKey) {
// start your submit function
}
return true;
}
Sembra carino, grazie. Di cosa hai bisogno la linea * e = e || evento; * per? – Alex
@Alex: firefox, opera e safari (e altri browser che incorporano il webkit) passano gli eventi come argomento al gestore eventi, ma IE no. In IE l'evento è una proprietà sull'oggetto globale. Fortunatamente la semantica di || in JS rendilo davvero pulito per aggirare questo problema. In JS il risultato dell'espressione 'a || b' sarà o il valore di 'a', o se' a' è considerato falso, il risultato sarà 'b'. Quindi in questo caso 'e = e || event' assegnerà 'e' a se stesso se l'evento viene passato come argomento, o imposterà' e' a 'evento', consentendo così a questo codice di funzionare in tutti i browser. – olliej
Colpire Inserire in un textarea
inserisce un'interruzione di riga, anziché inviare il modulo principale; questo non funzionerebbe in quel modo anche con tag regolari.
Sarebbe inopportuno tentare di aggirare questo comportamento, in quanto violerebbe le aspettative dell'utente su come si comportano i controlli dell'area di testo, sia in altri siti Web, sia in altre applicazioni sulla loro piattaforma.
++ per il paragrafo "sconsigliabile". Sapere sempre cosa farà la chiave di invio in un'area di testo del sito Web è una delle tante piccole imperfezioni che mi mancano quando uso altre GUI. – Shog9
anche se sono completamente d'accordo con il tuo consiglio, la domanda in questione è formulata in modo molto preciso e richiede piuttosto una risposta reale che un buon consiglio. +1 ancora, ma non potresti consigliare come allegare una sorta di keyListener alla textarea per inviare il modulo su Invio come richiesto? Sono piuttosto interessato ... –
Ho svalutato questa risposta molto tempo fa, ma ci sono casi in cui l'utente non è realmente consapevole che sta scrivendo in una textarea. Ad esempio, considera la linea di input della chat di Facebook. Inizia come una singola riga e si espande verticalmente quando l'utente digita di più. È assolutamente ragionevole che gli utenti si aspettino che invii l'invio. – hasen
Ecco la mia soluzione:
in JavaScript:
function isEnterPressed(e){
var keycode=null;
if (e!=null){
if (window.event!=undefined){
if (window.event.keyCode) keycode = window.event.keyCode;
else if (window.event.charCode) keycode = window.event.charCode;
}else{
keycode = e.keyCode;
}
}
return (keycode == 13);}
in HTML:
<input type="text" onkeyup="if(isEnterPressed(event)){/*do something*/}" />
@ Shog9 mi ha suggerito di copiare il mio rispondi a una versione duplicata di questa domanda: Un problema che ignora è l'esecuzione degli utenti metodo di input (editor) - es. immissione di testo non latina. L'IME con cui ho familiarità è il Kotoeri Hiragana IM su OSX, ma ce ne sono molti altri sia per il giapponese (Kotoeri da solo ha diverse modalità di input, e ce n'è almeno un'altra importante chiamata ATOK), oltre alle modalità per hangul, cinese tradizionale e semplificato, nonché numerose altre lingue meno conosciute. E questi metodi di input esistono su tutte le principali piattaforme (specialmente Win, Mac e Linux).
Il problema che introducono dal punto di vista del codice simile a quello che si sta tentando è che l'esatta pressione fisica del tasto non corrisponde necessariamente all'ingresso effettivo che l'utente sta inserendo.
Per esempio digitando la sequenza di caratteri toukyou<enter>
sotto hiragana di default produrrà la stringa とうきょう
, notare che non v'è <enter>
nel testo risultante poiché immettere conferma il testo composto. Ma oltre a questo l'effettiva sequenza di caratteri che appare cambia come l'ingresso è digitato:
t // t
と // to
とう // tou
とうk // touk
とうky // touky
とうきょ // toukyo
とうきょう // toukyou
Se la memoria non serve quando ho implementato questo in WebKit è stato necessario per rendere la keyCode essere 229 su keyDown per tutti i tasti digitati in un IME (per compat con IE) - ma non riesco a ricordare quale sia il comportamento di keyUp.
Vale anche la pena notare che in alcuni IME non si riceveranno necessariamente keydown, keypress o keyup. O riceverai più. Oppure vengono inviati tutti insieme alla fine dell'input.
In generale questa è una parte molto ... sporca ... delle implementazioni degli eventi DOM al momento.
L'area di testo consente agli utenti di immettere più righe di testo in modo che premendo Invio venga inserita solo una nuova riga nel testo. Utilizzare invece il campo di testo normale se si desidera tale comportamento
È possibile che non si utilizzi un wrapper di moduli?
$('#input_id').keypress(function(e){
if(e.which == 13){
$('#form_id').submit();
return false; //prevent duplicate submission
}
});
- 1. Ctrl + Invio jQuery in TEXTAREA
- 2. Come simulare premendo Invio in Rspec
- 3. invio di dati da un'attività a WearableListenerService
- 4. invio di dati da angularjs a django
- 5. Invia premendo Invio in un modulo di Windows
- 6. Premendo 'invio' su un tipo di input = "testo", come?
- 7. Come associare premendo "invio" con il pulsante di selezione?
- 8. Prevent Modulo di nuovo invio premendo il pulsante Indietro
- 9. mysql profiler "Invio di dati"
- 10. Invio di dati ai lavoratori
- 11. Invio di dati da Android a server con dati JSON
- 12. Invio di dati da frammenti nidificati a frammento padre
- 13. Invio modulo quando si preme invio nell'area di testo
- 14. Textarea prevenzione di nuova riga su Invio (jQuery)
- 15. Invio di SMS da PHP
- 16. invio di broadcast da asynctasks
- 17. libcurl HTTPS invio dati POST?
- 18. jQuery.post() - Trouble invio dati post
- 19. Premere Invio Invio sempre modulo
- 20. Invio di dati POST senza forma
- 21. Invio di dati tramite intestazione della richiesta e invio di dati tramite il corpo della richiesta
- 22. Interrompi Invio/Invio chiave inviando un modulo
- 23. Java Multicast Invio di dati, non ricezione
- 24. Invio di dati da OpenCV matrix a Matlab Engine, C++
- 25. Recupero o invio di dati da un modulo utilizzando knockout.js
- 26. Invio di dati da node.js a Java tramite i socket
- 27. MySQL "Invio di dati" orribilmente lento
- 28. Invio di dati al widget (schermata iniziale)
- 29. Recupero e invio di dati in C#
- 30. Invio di dati ossei a glsl shader
Mi dispiace per ingannarti. Ho letto textarea ma penso input type = "text" ...... Rimosso la mia risposta schifosa :) –
Le persone si stanno chiedendo perché non usare un input [testo] invece di textarea. Per me, il motivo è che voglio consentire all'utente di inserire solo una riga di testo, ma voglio che il testo si sovrapponga a più righe. L'input [testo] non avvolge –