0

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

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

有人能解释一下吗?

4

3 回答 3

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"]');

小提琴

于 2012-04-09T11:52:13.673 回答
0

我不确定,但认为你将不得不使用focusin而不是focus.

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

至少前一段时间focusin是处理live和的标准化事件focus

并且blur被称为focus out


笔记:

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

于 2012-04-09T11:56:31.083 回答
0

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

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

于 2012-04-09T12:19:49.340 回答