2010-12-13 4 views
12

ho una textarea come questo:Rimuovi interruzione di linea da textarea

<textarea tabindex="1" maxlength='2000' id="area"></textarea>

guardo questa textarea con jQuery:

$("#area").keypress(function (e) { 
    if (e.keyCode != 13) return; 
    var msg = $("#area").val().replace("\n", ""); 
    if (!util.isBlank(msg)) 
    { 
     send(msg); 
     $("#area").val(""); 
    } 
}); 

send() invia il messaggio al server se il ritorno è stato premuto il tasto e se il messaggio non è vuoto o contiene solo spazi di linea.

Il problema: dopo aver inviato il messaggio, la textarea non viene cancellata. Al caricamento della prima pagina, la textarea è vuota. Una volta inviato un messaggio, c'è una riga vuota nell'area di testo e non so come sbarazzarmene.

risposta

33

Il problema è che la pressione del tasto Invio non viene eliminata e sta facendo il suo solito comportamento del browser (ad esempio aggiungendo un'interruzione di riga). Aggiungi return false alla fine del gestore della tastiera per impedirlo.

$("#area").keypress(function (e) { 
    if (e.keyCode != 13) return; 
    var msg = $("#area").val().replace(/\n/g, ""); 
    if (!util.isBlank(msg)) 
    { 
     send(msg); 
     $("#area").val(""); 
    } 
    return false; 
}); 
+0

Grazie! Questo ha risolto il problema. – user478419

+1

replace dovrebbe essere 'replace (/ \ n/g," ");' replace ("\ n", "") cancellerà solo la prima nuova riga – Orlando

+1

@Orlando: Quella riga di codice è arrivata direttamente dalla domanda quindi è è possibile che sostituisca solo la prima interruzione di linea, ma sono d'accordo che è improbabile. –

0

Ti consigliamo di utilizzare la funzione event.preventDefault() per impedire l'azione evento di default accada, in questo caso l'aggiunta del personaggio digitare:

$("#area").keypress(function (e) { 
    e.preventDefault(); 
    if (e.keyCode != 13) return; 
    var msg = $("#area").val().replace("\n", ""); 
    if (!util.isBlank(msg)) 
    { 
     send(msg); 
     $("#area").val(""); 
    } 
}); 
+0

Questo non funziona. Come puoi immaginare, la textarea è pensata per l'input di testo. Se impedisco l'azione predefinita, non sono in grado di inserire nulla. – user478419

8

Thomas, l'e.preventDefault(); avrebbe bisogno di essere avvolto all'interno di un condizionale applicandolo solo al tasto invio.

// Restrict ENTER. 
if (e.keyCode == '13') { e.preventDefault(); } 

L'intera funzione sarebbe simile a questa (con commento):

// Key Press Listener Attachment for #area. 
$("#area").keypress(function (event) { 

    // If the key code is not associated with the ENTER key... 
    if (event.keyCode != 13) { 

     // ...exit the function. 
     return false; 

    } else { 

     // Otherwise prevent the default event. 
     event.preventDefault(); 

     // Get the message value, stripping any newline characters. 
     var msg = $("#area").val().replace("\n", ""); 

     // If the message is not blank now... 
     if (!util.isBlank(msg)) { 

      // ...send the message. 
      send(msg); 

      // Clear the text area. 
      $("#area").val(""); 

     } 

    } 

}); 
+0

Grazie! Questa risposta funziona per me! –

+0

Solo per un po 'di eleganza, penserei che dovresti semplicemente controllare if (event.keyCode == 13) {// fare qualcosa; } 'e salva te stesso le 3 righe supplementari in cui restituisci false se keyCode non è uguale a 13. – CodeBurner