2013-07-08 73 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

編輯:

這樣的要求似乎是可以用退格鍵,按鍵不能使用,因爲它不註冊退格。
然而,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

謝謝!它完全放棄了我的想法。不知道我是如何忘記按鍵的。現在唯一的問題是讓他們使用退格刪除文本。現在有可能我們稱之爲'return false'? – ryan

+1

@ryan - nope,按backspace將不可能這樣,我會爲此添加一個解決方案。 – adeneo

+0

感謝您的幫助。 – ryan