jquery .live'焦点'事件未在Google Chrome上触发

时间:2012-04-09 11:47:49

标签: google-chrome jquery browser-support

我想知道这是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");
    }
});

将输出发送到所有浏览器的控制台窗口,但谷歌浏览器(10)

除外

唯一的区别是从“更改”变为“焦点”作为我的事件触发器。

任何人都可以解释一下吗?

3 个答案:

答案 0 :(得分:1)

如果使用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"]');

如果仍然使用直播,而不需要地图,请执行:

$('.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

答案 1 :(得分:0)

我不确定,但认为您必须使用focusin而不是focus

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

至少在一段时间之前focusin是处理livefocus的规范化事件。

blur被称为focus out


注意:

  

当focusin事件或其中的任何元素获得焦点时,focusin事件将被发送到该元素。这与焦点事件的区别在于它支持检测父元素上的焦点事件(换句话说,它支持事件冒泡)。

答案 2 :(得分:0)

检查这个问题[1],它指出焦点事件不会在chrome和safari中的单选按钮上被触发。

[1] https://stackoverflow.com/a/5744926/1317080