2012-12-30 5 views
0

J'ai une zone de texte, et à chaque entrée je veux qu'elle soit vide si quelque chose a été écrit. mais mon problème est; sur le premier entrez les sauts de ligne, et vous continuez à écrire à partir de la deuxième ligne. Cela n'arrive qu'à la première entrée. il n'y a aucun problème à vider la zone de texte, vous continuez simplement à écrire à partir de la deuxième ligne, qui est le problème.Rupture de ligne au niveau du clavier

onkeydown= if(event.keyCode == 13){ 

    sendMessage(); 
} 

function sendMessage(user){ 

    var message = $('#textarea').val(); 
    $('#textarea').val(''); 
} 

Répondre

2
if(event.keyCode == 13) { 
    sendMessage(); 
    if (event.preventDefault) event.preventDefault(); 
    return false; 
} 

keydown arrive avant que le personnage est entré dans le textarea, il vous suffit d'appeler preventDefault sur l'événement afin qu'il ne pénètre pas dans un saut de ligne après que vous avez appelé votre fonction qui efface la zone de texte. return false seul devrait suffire aussi si le code ci-dessus est en ligne dans le HTML, ce qui n'est pas vraiment recommandé. Voir la solution mise à jour ci-dessous:


Pour unobtrusiveness et back-compat, je vous conseille de faire tout cela avec jQuery:

$('#textarea_ID').keydown(function(e) { 
    if (e.which == 13) { 
     e.preventDefault(); 
     var message = $(this).val(); 
     $(this).val(''); 
     //rest of your function using `message` here 
    } 
}); 

Fiddle

+0

cela fonctionne merci! – hackio

+1

Pas de problème. '=]' –

+0

Notez que le code en haut (n'utilisant pas jQuery) ne fonctionnera pas dans les anciennes versions d'IE (8 et moins). Le code jQuery en bas est une bonne solution si :) –

0

Dans jQuery utiliser la propriété which pour le code . Puis retour faux avec e.preventDefault();

var field = $('.classname'); 

field.keydown(function(e){ 
    if(e.which==13){ 
     sendMessage(); 
     e.preventDefault(); 
    } 


}); 
0

Ajoutez simplement return false; à votre fonction keydown. Cela empêche l'exécution de l'action par défaut de la clé (un saut de ligne dans ce cas).

Vous pouvez également inclure du code pour gérer la façon dont Internet Explorer obtient les codes-clés. Votre nouvelle fonction serait:

onkeydown = function (e) { 
    // Gets keycode cross browser 
    e = window.event ? window.event : e; 
    var keycode = e.keyCode !== null ? e.keyCode : e.charCode; 

    // Checks if it was the enter key that was pressed (enter = keycode 13) 
    if (keycode === 13) { 
     // Calls function to do stuff 
     sendMessage(); 
     // Cancels the default action of the (enter) key 
     return false; 
    } 
}