1

とてもシンプルに見えるものをまとめようとしていますが、何らかの理由でreturn false;正しく動作させることができません。「img」という単語が 3 回見つかった後、ユーザーがそれ以上テキストを入力できないようにしようとしています。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 に答える