Базовая форма вашего регулярного выражения выглядит хорошо, просто включите то, что вы хотите включить, и будьте в курсе символов с акцентом.С другой стороны, вы можете исключить символы, которые не хотите.
Но я бы использовал для этого событие keypress
, а не keyup
.keypress
срабатывает, когда набирается фактический набираемый символ, и срабатывает при повторении клавиши (тогда как вы получаете только один keyup
, даже если клавиша повторяется).keypress
не запускается для Shift, Meta, Ctrl и т. Д. Обновление : это не обязательно верно для кросс-браузера (вздох) , см.Обновление ниже.
Если вы перехватываете keypress
, я, вероятно, не буду ничего отфильтровывать (не нужно регулярное выражение), потому что я бы предпочел отложить браузер и его осведомленность олокаль для того, что составляет настоящий символ. Я бы также, вероятно, включил небольшую задержку, чтобы избежать большого количества ненужных поисков.Если человек довольно быстро печатает «fred», нет необходимости искать по «f», «fr» и «fre».
Вот пример того, что я имею в виду (объединение keypress
с небольшой задержкой).Если вы действительно хотите отфильтровать определенные символы, вы можете сделать это в обработчике событий, но я не указал ниже по вышеуказанным причинам:
HTML:
<input type='text' id='theText'>
JavaScript (используяjQuery, поскольку вы пометили свой вопрос с помощью jquery
):
jQuery(function($) {
var searchTimer = 0;
$('#theText').keypress(function() {
if (searchTimer != 0) {
clearTimeout(searchTimer);
}
searchTimer = setTimeout(doSearch, 250);
});
function doSearch() {
searchTimer = 0;
display("Search: '" + $('#theText').val() + "'");
}
function display(msg) {
$('<p/>').html(msg).appendTo(document.body);
}
});
Живая копия
Этот пример ищет четверть секунды после последней keypress
, которую он видит;настройте параметр на setTimeout
, как считаете нужным.
Обновление : После вашего комментария ниже о клавишах со стрелками я подумал: "но вы не видите клавиш со стрелками на keypress
, а вы?и ответ: вы делаете на Opera и пару других. вздох Так что да, с фильтром:
$('#theText').keypress(function(event) {
// Magic numbers from http://unixpapa.com/js/key.html
switch (event.keyCode) {
case 37: // Left
case 38: // Up
case 39: // Right
case 40: // Down
break;
default:
// A "real" key, include it
if (searchTimer != 0) {
clearTimeout(searchTimer);
}
searchTimer = setTimeout(doSearch, 250);
}
});
function doSearch() {
searchTimer = 0;
display("Search: '" + $('#theText').val() + "'");
}
Живая копия (это всего лишь отфильтровывает клавиши со стрелками; вы хотите расширитьthat)
Если вы еще не знаете, если это так, эта страница отлично подходит для информации о безумии, которое происходит с событиями клавиатуры в браузерах.Может быть немного устаревшим.