2010-12-13 22 views
12

que tiene un área de texto así:Quitar salto de línea del área de texto

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

Miro esta área de texto 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() envía el mensaje al servidor si la devolución se presionó la tecla y si el mensaje no está en blanco o solo contiene espacios de línea.

El problema: después de enviar el mensaje, el área de texto no se borra. En la primera carga de la página, el área de texto está vacío. Una vez que se envió un mensaje, hay una línea en blanco en el área de texto y no sé cómo deshacerse de ella.

Respuesta

33

El problema es que la tecla Entrar no se está suprimiendo y está haciendo su comportamiento habitual del navegador (es decir, agregar un salto de línea). Agregue return false al final de su controlador de pulsaciones de teclas para evitar esto.

$("#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

Gracias! Eso resolvió el problema. – user478419

+1

reemplazar debe ser 'replace (/ \ n/g," ");' replace ("\ n", "") solo eliminará la primera nueva línea – Orlando

+1

@Orlando: Esa línea de código vino directamente de la pregunta por lo que es Es posible que reemplazar el primer salto de línea sea lo que el OP pretendía, pero acepto que es poco probable. –

0

Usted querrá utilizar la función event.preventDefault() para evitar la acción del evento predeterminado suceda, en este caso la adición de la introducción de carácter:

$("#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

Eso no funciona. Como se puede imaginar, el área de texto está destinado a la entrada de texto. Si evito la acción predeterminada, entonces no puedo ingresar nada. – user478419

8

Thomas, el e.preventDefault(); Tendría que estar envuelto dentro de un condicional aplicándolo solo a la tecla Intro.

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

La función entera se vería algo como esto (con comentarios):

// 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

Gracias! ¡Esta respuesta funciona para mí! –

+0

Solo por un poco de elegancia, creo que simplemente verificará 'if (event.keyCode == 13) {// hacer algo; } 'y ahorrarse las 3 líneas extra donde devuelve falso si keyCode no es igual a 13. – CodeBurner