2012-04-09 66 views
0

我不知道這是鉻或jQuery的一個bug,或我誤解了.live功能的使用的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"); 
    } 
}); 

將輸出發送到控制檯窗口中的所有BR (谷歌瀏覽器除外)(012)

唯一的區別是我的事件觸發器從「更改」到「焦點」的更改。

任何人都可以點亮一下嗎?

回答

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

+0

升級到1.7,它嘗試了三種解決方案,但還是不能讓「專注」鉻觸發。在你的第一個解決方案中,'這是無線電改變'被寫入控制檯,但不是'這是無線電焦點'在Chrome中,在Firefox中這兩個句子同時被記錄在 – 2012-04-09 12:07:53

+0

@KevinBradshaw - 更新了我的答案,但我相信米爾科速度更快。 – adeneo 2012-04-09 13:16:39

+0

接受Mirko的回答,並贊成你的信息豐富 – 2012-04-09 17:32:21

0

林不知道,但認爲你將不得不使用focusin而不是focus

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

至少前段時間focusin是處理livefocus爲標準化事件。

而且blur被稱爲focus out


注:

時,或內部的任何元素,獲得焦點的focusIn事件被髮送到一個元素。這與焦點事件有所不同,因爲它支持在父元素上檢測焦點事件(換句話說,它支持事件冒泡)。

+0

感謝您的回答,但改爲focusin對Chrome沒有影響 – 2012-04-09 12:06:11