У меня есть этот пример кода:
$myTrigger
.click(function(e){
alert('click');
})
.focus(function(e){
alert('focus');
$(this).click()
})
Намерение состоит в том, что я хочу, чтобы что-то произошло, когда Вы нажимаете на $myTrigger. Если с другой стороны, Вы снабжаете вкладками на него через клавиатуру (т.е., фокус), я хочу ту же самую вещь произойти, таким образом, я прошу, чтобы это нажало.
Выгода - то, если я нажимаю на нее, она также фокусируется. Таким образом, оба предупреждения уходят.
Существует ли способ препятствовать тому, чтобы событие фокуса ушло при нажатии?
ОБНОВЛЕНИЕ:
Комментарий Ajm получил меня думающий, что я, возможно, спрашиваю неправильную вещь.
Вопрос: событие щелчка всегда также инициировало фокус в JavaScript (и/или в jQuery?). Я могу принять каждый раз, когда я хочу обработать и нажимающий мышью и снабжающий вкладками - в с клавиатурой, фокус (), событие обработает обоих?
Или действительно ли это зависит от конкретного элемента, к которому я присоединяю события? (В этом случае $myObject, оказывается, тег привязки (ссылка).
jQuery имеет для этого встроенную функцию, которая не используется так часто, как .one ()
$mytrigger.one('click focus', function() { alert("event"); });
Это сработает только один раз, или вы можете повторно привязать, если хотите впоследствии.
Чтобы предотвратить двойной вызов фокуса, установите переменную, чтобы определить, есть ли у элемента фокус.
var hasFocus = false;
$('#myTrigger').focusIn(
function(){
hasFocus = true;
//do stuff
}
);
$('#myTrigger').focusOut(
function(){
hasFocus = false;
}
);
Переведите все функции в фокус и сообщите jQuery, чтобы он устанавливал фокус на элементе при щелчке по нему, если вы запускаете браузер, который этого не делает.
$(#myTrigger).click( function(){ if(!hasFocus){$(#myTrigger).focus()}});
Некоторое время назад я столкнулся с похожей проблемой. Я решил это , отвечая на первое событие и игнорируя события в течение следующих 20 мс.
Попробуйте что-то вроде этого:
$(document).ready(OnReady);
var okToClick = true;
function OnReady() {
//Attach to both click and focus events
$("#item").click(PerformAction).focus(PerformAction);
}
function PerformAction() {
if (okToClick) {
okToClick = false;
// Do something interesting here...
setTimeout(function() { okToClick = true; }, 20);
}
}
Вы можете использовать только метод focus () и прочитать эту статью о типах событий (e) в JavaScript: http : //www.quirksmode.org/js/events_properties.html
Чтобы определить, какое событие произошло с вашей мышью или клавиатурой (чтобы проверить это), вы можете использовать:
if (!e) var e = window.event;
alert(e.type);