jquery .live событие 'focus' не вызывается в Google Chrome

Интересно, это ошибка в Chrome или JQuery, или я неправильно понимаю использование функции.live

$('.input_form input[type="radio"]').live({
    'change':function(){
        console.log("this is a radio button");
    }
});

Приведенный выше код отправляет вывод в окно консоли, когда я нажимаю переключатель с классом input_form во всех основных браузерах

однако следующий код:

$('.input_form input[type="radio"]').live({
    'focus':function(){
        console.log("this is a radio button");
    }
});

отправляет вывод в окно консоли во всех браузерах, кроме Google Chrome (10)

единственное отличие - это изменение с "изменения" на "фокус" в качестве моего триггера событий.

Кто-нибудь может пролить свет?

3 ответа

Решение

Проверьте этот вопрос [1], в нем говорится, что события фокусировки не запускаются на переключателях в chrome и safari.

[1] /questions/21934101/google-chrome-ne-zapuskaet-sobyitie-razmyitiya-na-pereklyuchatelyah/21934124#21934124

Если вы используете jQuery 1.7+, вам, вероятно, следует сделать:

$(document).on({
    change: function(){
        console.log("this is a radio button on change");
    },
    focus: function() {
        console.log("this is a radio button on focus");
    }
}, '.input_form input[type="radio"]');

Если вы все еще используете live, и вам не нужна карта, выполните:

$('.input_form input[type="radio"]').live('focus', function(){
    console.log("this is a radio button");
});

или с картой:

$('.input_form input[type="radio"]').live({
    focus: function(){
        console.log("this is a radio button");
    }
});

В webkit фокус не переключается на переключатели при нажатии автоматически, только при использовании вкладки. Тем не менее, вы можете установить фокус на элементе, хотя все, почему вы делаете это таким образом, мне не под силу, но это возможно:

$(document).on({
    click: function(){
        console.log("this is a radio button on click");
        $(this).focus();
    },
    focus: function() {
        console.log("this is a radio button on focus");
    }
}, '.input_form input[type="radio"]');

FIDDLE

Im not sure but think you will have to use focusin вместо focus,

$('.input_form input[type="radio"]').live({
    'focusin': function(){
        console.log("this is a radio button");
    }
});

At least some time ago focusin was a normalized event for dealing with live а также focus,

А также blur называется focus out


Замечания:

The focusin event is sent to an element when it, or any element inside of it, gains focus. Это отличается от события фокуса тем, что оно поддерживает обнаружение события фокуса на родительских элементах (другими словами, оно поддерживает всплытие событий).

Другие вопросы по тегам