在keydown换行

时间:2012-12-30 20:50:57

标签: javascript jquery textarea onkeydown

我有一个textarea,并且在每个输入中,如果有东西写的话,我希望它变成空白。但我的问题是;在第一行输入换行符,然后继续从第二行开始写入。它只发生在第一次进入。清空textarea没有问题,你只需继续写第二行,这就是问题所在。

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

    sendMessage();
}

function sendMessage(user){

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

3 个答案:

答案 0 :(得分:3)

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

keydowntextarea中输入字符之前发生,因此您只需要在事件上调用preventDefault,这样在您调用之后它就不会进入换行符清除文本区域的功能。如果上面的代码在HTML中是内联的,那么return false就足够了,这不是真正推荐的。请参阅下面的更新解决方案:


对于不引人注意和反算法,我建议用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

答案 1 :(得分:0)

在jQuery中,使用代码的which属性。然后使用e.preventDefault();

返回false
var field = $('.classname');

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


});

答案 2 :(得分:0)

只需将return false;添加到keydown功能即可。这可以防止执行密钥的默认操作(在这种情况下为换行符)。

您可能还希望包含代码来处理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;
    }
}