2011-09-02 72 views
0

這是我的html:.shake()觸發blur事件

<div><input/></div> 

,這是我的jQuery:

$('input').focus(); 
$('input').blur(function() { console.log('BLUR!'); }); 
$('div').effect('shake'); 

請參閱http://jsfiddle.net/kN7tr/

不知何故,防抖效果觸發blur事件。這真的很煩人。有什麼建議麼?

編輯:下面的情況是類似http://jsfiddle.net/kN7tr/1/

+0

我認爲[這](http://stackoverflow.com/questions/7244558/shake-effect-kills-focus)可能會回答你的問題 – qwertymk

+0

@qwertymk:哈哈!我在想我。更嚴重的是,1.8.16 – Randomblue

+0

這個問題似乎仍然存在,你可以嘗試解除模糊事件的解除綁定,並在重新綁定它們的回調中 – qwertymk

回答

2

一些挖後,看起來這是罪魁禍首http://bugs.jqueryui.com/ticket/7595

這是修復:

// Fixes #7595 - Elements lose focus when wrapped. 
if (element[ 0 ] === active || $.contains(element[ 0 ], active)) { 
    $(active).focus(); 
} 

(這是對4425線1.8.16如果你有興趣 - 評論是誤導,因爲它是在討論一個裝飾器(與無關文字包裝或任何東西))

小提琴有1.8.14,該錯誤被報告反對。

此修復可作爲在16年1月8日,這是可以在谷歌CDN(顯然,如果你下載了最新的)

+0

好的選擇!但我在我的計算機上使用1.8.16,問題依然存在...... – Randomblue

+0

然後我會記錄一個錯誤,或者甚至遍歷代碼的這一部分來查看是否存在未處理的邊緣案例。 –

0

您可以設置focus回輸入後shake動畫完成

$('div').effect('shake', function(){ 
    $('input').focus(); 
}); 

Worrking demo

工作周圍這是附加blur事件在shake回調裏面,並在那裏設置focus。我真的不明白爲什麼focus正在消失,這就是爲什麼blur正在射擊。我希望這項工作可以幫助你。

工作demo

$('input').effect('shake', function(){ 
    $('input').focus(); 
    $('input').blur(function() { console.log('BLUR!'); 
    }); 
}); 
+0

仍然會導致模糊事件觸發!見http://jsfiddle.net/kN7tr/5/ – Randomblue

+0

看看我編輯的答案。 – ShankarSangoli

+0

@Randomblue - 我沒有看到像你說的那樣在Chrome或IE9中發生模糊。我確實看到它失去了焦點,但是在運行小提琴時,我沒有看到它每次擊中時都會記錄模糊......這是您所描述的發生的正確情況? –

0

Live Demo

var $focusElement; 

// Keep track of the element that was focused 
$(":input").focus(function() { 
    $focusElement = $(this); 
}); 

$('input').focus(); 
$('input').blur(function() { console.log('BLUR!'); 
}); 

$('div').effect('shake', function(){ 
     // Refocus the element 
     $focusElement.focus(); 
    }); 

醜陋的黑客工具,還張貼Shake effect kills focus在那裏確定這是一個錯誤。