2011-09-02 63 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在那里确定这是一个错误。