Обратите внимание: метод focus() для объекта jquery на самом деле не фокусирует его: он просто вызывает обработчик фокуса! чтобы на самом деле сфокусировать элемент, вы должны сделать это:
var clickedDiv = false;
$('input').blur( function() {
if(clickeddiv) {
$('input').each(function(){this[0].focus()});
}
}
$('div').mousedown(function() { clickedDiv = true; })
.mouseup(function() { clickedDiv = false });
Обратите внимание, что я использовал метод focus() для собственных объектов DOM, а не для объектов jquery.
Это прямое (грубая сила) изменение вашего точного кода. Однако, если я правильно понимаю, что вы пытаетесь сделать, вы пытаетесь сфокусировать поле ввода, когда нажимается определенный элемент div, когда этот ввод находится в фокусе.
Вот мое мнение о том, как вы это сделаете:
var inFocus = false;
$('#myinput').focus(function() { inFocus = true; })
.blur(function() { inFocus = false; });
$('#mydiv').mousedown(function() {
if( inFocus )
setTimeout( function(){ $('#myinput')[0].focus(); }, 100 );
}
Обратите внимание: я дал тайм-аут для фокусировки рассматриваемого ввода, так что ввод может фактически выйти из фокуса в то же время. В противном случае мы бы уделяли ему внимание непосредственно перед тем, как оно вот-вот потеряет его. Что касается решения 100 мс, то здесь действительно случайность.
Ваше здоровье,
младший
EDIT в ответ на комментарий @Jim
Первый метод, вероятно, не сработал, потому что это был неправильный подход для начала.
Что касается второго вопроса, мы должны использовать .focus()
для собственного объекта DOM, а не для оболочки jQuery вокруг него, потому что собственный метод .focus()
заставляет объект фактически захватывать фокус, в то время как метод jquery просто вызывает обработчик событий, связанный< /em> с событием focus
.
Таким образом, в то время как метод jquery вызывает обработчик событий фокуса, нативный метод фактически предоставляет фокус, следовательно вызывая обработчик. Это просто неудачная номенклатура, что название этого метода перекрывается.
person
jrharshath
schedule
08.07.2009