jQuery震动效果似乎杀死了被震动元素的焦点。例如(见http://jsfiddle.net/xSNBp/)
$('input').focus().effect('shake', { times: 3, distance: 2 }, 30);
杀死了焦点。这是一个错误吗?我的问题是,当触发震动效果时,我不知道当前聚焦的是什么元素,所以我无法重新聚焦它。有什么建议吗?
(如果这是一个错误,我该怎么办?)
答案 0 :(得分:3)
您可以尝试以下操作。基本上你只需保存聚焦的元素,这样你就可以在动画完成后重新聚焦。
var $focusElement;
$(":input").focus(function () {
$focusElement = $(this);
});
// focus some random element, will be saved in the function above
$('#textTwo').focus();
$('input').effect('shake', { times: 3, distance: 2 }, 30,
function(){
// Refocus the element
$focusElement.focus();
});
<强> Live Demo 强>
答案 1 :(得分:3)
我们最近将a commit推送到master / 1.8以解决一些效果的焦点问题。你是否尝试过使用git的jQuery UI版本?甚至UI 1.8.16?
请参阅http://bugs.jqueryui.com/ticket/7595了解要求修复的错误。
以下是一种解决方法,应该在较旧的1.8代码中为您修复它:
function doShake( elem, opts, duration ) {
var active = document.activeElement;
elem.effect( "shake", opts, duration, fixFocus );
fixFocus();
function fixFocus() {
if ( active === elem[0] || $.contains( elem[0], active ) ) {
$( active ).focus();
}
}
}
如果这不是您遇到的问题,请告知我们错误跟踪器。
它发生的原因是当你“封装”或将一个聚焦元素附加到DOM中的其他地方时 - 它会失去焦点。因此,我们必须向createWrapper
和removeWrapper
添加一项检查以保留焦点。
答案 2 :(得分:2)
这样做怎么样:
$('input').keypress(function() {
var el = $(this);
el.effect('shake', {
times: 10,
distance: 5
}, 30, function() {
el.focus()
});
})