我正在尝试将看似简单的东西放在一起但由于某种原因我无法使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);
});
答案 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);
});
这是一种更简单的方法:
$('#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;
});
修改强>
由于要求似乎是能够使用退格键,因此不能使用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
});