2013-07-08 1 views
1

Я пытаюсь собрать что-то кажется таким простым, но по какой-то причине я не могу заставить return false; работать правильно. Я пытаюсь запретить пользователю больше вводить текст после того, как слово «img» будет найдено три раза. По какой-то причине return false; не работает. У меня есть все, что работает в моей демонстрации, кроме как остановить пользователя от ввода. Любая помощь будет большой.Остановить ввод пользователя после того, как слово найдено в textarea

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

ответ

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

EDIT:

Как требование, кажется, чтобы быть в состоянии использовать забой, не может нажатие клавиши можно использовать, как он не регистрирует забой.
Однако 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

+0

Спасибо! Это полностью сошло с ума. Не знаю, как я забыл о keypress. Теперь единственная проблема заключается в том, чтобы позволить им использовать backspace для удаления текста. Возможно ли это, что мы назвали 'return false'? – ryan

+1

@ryan - нет, нажатие назад будет невозможно, и я добавлю решение для этого. – adeneo

+0

Спасибо за помощь. – ryan