2012-07-11 64 views
0

jQuery有可能發現用戶在搜索框中輸入了第一個字符@#,然後提示一個提示,不管他們有什麼鍵盤語言或設置?在輸入中發現#或@

例如,如果我在搜索框中輸入@我希望它提示消息或執行我的操作。

​<input type='text' name='search' id='search' />​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 

jQuery的

$("#search").keydown(function(event) { 
    alert(event.which); 
});​ 

回答

1

只有keypress event報告的可靠值event.whichhttp://jsfiddle.net/QDCvG/

$("#search").keypress(function(event) { 
    // @ = 64, # = 35 
    if ((this.value.length === 0 || this.selectionStart === 0) 
    && (event.which === 64 || event.which === 35)) { 
     // keypress fires before the field is populated 
    } 
});​ 

String.fromCharCode(event.which)可用於獲取輸入的字符。

+1

如果用戶編輯字段開頭插入#? – nnnnnn 2012-07-11 09:58:27

+1

好點。我會添加一個額外的檢查,使用'this.selectionStart'。 – 2012-07-11 10:03:55

2

如果你想測試輸入的第一字符是否是這些字符之一,那麼不測試剛鍵入的字符,測試的第一個字符:

$("#search").on("blur", function() { 
    if (/^[@#]/.test(this.value)) 
     alert("@ or # entered."); 
}); 

注意,這將是最好在模糊(甚至是提交表單)時做到這一點,而不是每次擊鍵時都要這樣做,因爲這樣做對用戶來說不那麼煩人,因爲它可以應付複製/粘貼或拖放。

+0

'keydown,keypress'在**字段填充之前觸發**。 – 2012-07-11 09:43:18

+0

謝謝@RobW。答案已更新。 – nnnnnn 2012-07-11 09:45:47

1

您必須將您的活動更改爲綁定keyup,即使釋放了兩個密鑰,它也會觸發事件。 .charAt(0)方法將檢查輸入框的第一個字符。

$("#search").keyup(function(event) { 
    var curKey = $(this).val(); 

    if (curKey.charAt(0) == '@' || curKey.charAt(0) == '#') 
    { 
     alert('@ or # typed first!'); 
    } 
}); 

LIVE:http://jsfiddle.net/yHcVH/