У меня есть два поля ввода. Я хочу вызвать внимание на #area, неважно, где пользователь нажимает, если это не находится на #input. Я попробовал что-то вроде этого, но так как вход является частью документа, это не работает.
$("#area").focus();
$(document).click(function() { $("#area").focus() };
$("#input").click(function() { $("#input").focus() };
Мысли?
change it to
$("#area").focus();
$(document).click(function() { $("#area").focus() });
$("#input").click(function(e) { e.stopPropagation(); $("#input").focus() });
Это остановит событие от распространения на документ, и оно будет поймано только #input
Решение stopPropogation
проще, чем то, что я собираюсь предложить, но, вероятно, стоит обсудить этот другой вариант. В первой функции, которую вы получили, вы можете попробовать взять первый аргумент функции, который является нормализованным объектом события jQuery:
$(document).click(function(event) { ...
и проверить, является ли свойство target
события вашим входом:
$(document).click(function(event) {
if(! (event.target == $("#input").get(0)) )
$("#area").focus();
}
Вам необходимо отменить всплытие событий при нажатии на обычные входы, либо вернув false в обработчике событий, либо вызвав e.stopPropagation ()
.
Я не уверен, имеет ли значение порядок, в котором вы назначаете обработчики событий, но вы можете попробовать поместить событие #input
первым.