2012-12-30 19 views
0

我有一個textarea,並且每輸入一次,我都希望它在寫入內容時變爲空白。但我的問題是;首先輸入換行符,然後繼續從第二行開始輸入。它只發生在第一個輸入。清空textarea沒有問題,你只需繼續從第二行寫入,這是問題所在。keydown上的換行

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

    sendMessage(); 
} 

function sendMessage(user){ 

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

回答

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

​​發生在textarea在輸入字符之前,所以你只需要調用preventDefault的事件,因此它不進入一個換行符你叫你的函數,用於清除後文本區域。如果上面的代碼在HTML中是內聯的,那麼單獨使用return false就足夠了,這並不是真正的建議。請參見下面更新的解決方案:


對於不可見性和備份compat的,我建議你用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

該作品謝謝你! – hackio

+1

沒問題。 '=]' –

+0

請注意,頂部的代碼(不使用jQuery)不適用於舊版IE(8或更低版本)。在底部的jQuery代碼是一個很好的解決方案:) –

0

在jQuery中使用which屬性代碼。然後返回false與e.preventDefault();

var field = $('.classname'); 

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


}); 
0

只需添加return false;您​​功能。這可以防止執行該鍵(在這種情況下爲換行符)的默認操作。

您可能還想包含代碼來處理Internet Explorer獲取鍵碼的方式。你的新功能將是:

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; 
    } 
}