在textarea中找到单词后停止用户输入

时间:2013-07-08 23:12:53

标签: jquery textarea maxlength

我正在尝试将看似简单的东西放在一起但由于某种原因我无法使return false;正常工作。我试图阻止用户在找到三次“img”之后再输入任何文本。 return false;由于某种原因无效。除了如何阻止用户输入外,我的所有内容都在我的演示中工作。任何帮助都会很棒。

DEMO:jsfiddle.net/ryanverdel/2cAeX/

$('#test').keyup(function(e){
var v = $(this).val(),
    w = v.split(/\b[\s,\.-:;]*/),
    word = 'img',
    c = 0;
for (var i=0,len=w.length;i<len;i++){
    if (w[i] === word){
        c++;
    }
    if(c == 3){
    return false           
    }
}
$('#output').text(c);
});

1 个答案:

答案 0 :(得分:6)

使用keyup有点晚了,因为键已经被按下了:

$('#test').keypress(function(e){
    var v = $(this).val(),
        w = v.split(/\b[\s,\.-:;]*/),
        word = 'img',
        c = 0;
    for (var i=0,len=w.length;i<len;i++){
        if (w[i] === word){
            c++;
        }

    }
    if(c == 3){
        return false           
    }
    $('#output').text(c);
});

FIDDLE

这是一种更简单的方法:

$('#test').on('keypress', function(e){
    var word  = 'img',
        count = this.value.match(new RegExp('\\b'+word+'\\b','g')) || [];

    $('#output').text(count.length);
    return count.length < 3;
});

FIDDLE

修改

由于要求似乎是能够使用退格键,因此不能使用keypress,因为它不会注册退格键。
然而,keydown将会,并且我们可以做一些聪明的魔术:

$('#test').on('keydown', function(e){
    var word  = 'img',
        count = this.value.match(new RegExp('\\b'+word+'\\b','g')) || [];

    $('#output').text(count.length);
    return !(count.length > 2 && e.which != 8); // 8 is backspace
});

FIDDLE