В настоящее время я использую следующий код, чтобы позволить пользователю "перелистывать" содержимое в моем веб-приложении:
$(this).keyup(function(e) {
if(e.which == 37) {
document.location = $("#prev_button").attr('href');
}else if(e.which == 39) {
document.location = $("#next_button").attr('href');
}
});
Проблема заключается в том, что если пользователь находится в форме поиска в верхней части страницы, я не хочу, чтобы клавиши со стрелками перенаправляли страницу (вместо этого они должны действовать так, как обычно, без функциональности, то есть разрешить перемещение текстового курсора вокруг текста).
идентификатор формы - это "searchForm". Могу ли я добавить предложение к выражению if, которое вычисляет false, если выбрана форма поиска?
Я бы использовал что-то вроде: Demo
$(this).keyup(function(e) {
if(~['input', 'textarea'].indexOf(e.target.tagName.toLowerCase())) return;
if(e.which == 37) {
document.location = $("#prev_button").attr('href');
}else if(e.which == 39) {
document.location = $("#next_button").attr('href');
}
});
Таким образом вы можете исключить все элементы <input>
и <textarea>
.
IMO, исключая только #searchbox
, не является отличным решением, поскольку в будущем вы можете изменить свой id
или включить другие текстовые поля, но забудьте, что вы должны отражать изменения в скрипте исключения.
Вы можете остановить распространение события в текстовом поле, чтобы событие не попало в ваш другой обработчик:
$('#searchbox').keyup(function(e) {
e.stopPropagation();
});
Посмотрите эту тему :) Найдите, если в настоящий момент выбран текстовый блок
function checkFocus() {
if ($(document.activeElement).attr("type") == "text" || $(document.activeElement).attr("type") == "textarea") {
//Something selected
return true;
}
}
focus
элемента. Например, в jQuery:if( $("#myEle").is(":focus") ) return false;
,