1

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

演示: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);
});
4

1 回答 1

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

小提琴

这是一个更简单的方法:

$('#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;
});

小提琴

编辑:

由于似乎要求能够使用退格键,因此不能使用按键,因为它不注册退格键。
但是,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
});

小提琴

于 2013-07-08T23:16:16.197 回答