Вопрос

Почему в то следующий код то focusin Обработчик событий не вызывается?

HTML:

<div id='wrapper'></div>
<div id='button'>Click Here</div>
<div id='output'></div>

JS:

$(function() {
    $('input').live('focusin', function() {
        $('#output').html('focusin'); // Why this not happens ?
    });
    $('#button').click(function() {
        $('#button').hide();
        build_inputs();
    });    
});
function build_inputs() {
    var html = "<input type='text' /> \
                <br /> \
                <input type='text' />";
    $('#wrapper').append(html);
    $('#wrapper').fadeIn(500, function() {
        $('input:first').focus();
    });
}

CSS:

#wrapper {
    display: none;
    background: #aaa;
    width: 170px;
    padding: 20px;
}
Это было полезно?

Решение

Почему-то я не уверен почему, .focus() не вызывает focusin мероприятие.

Вы можете повторить это поведение, изменив линию фокусировки, чтобы добавить .trigger('focusin').

Так что ваш код Fadein становится:

$('#wrapper').fadeIn(500, function() {
    $('input:first').focus().trigger('focusin');
});

Вы можете проверить это здесь: http://jsfiddle.net/yt7jd/

Редактировать: как упоминается Джейсон, вы также можете позвонить .focusin() метод вместо .trigger('focusin').

Редактировать 2: кажется, что это ошибка в 1.4.3. Он был зарегистрирован с командой jQuery для фиксации: http://bugs.jquery.com/ticket/7340.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top