首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >摇晃效果杀死焦点

摇晃效果杀死焦点
EN

Stack Overflow用户
提问于 2011-08-30 22:09:00
回答 3查看 1.3K关注 0票数 2

jQuery抖动效果似乎会杀死被抖动的元素的焦点。例如(参见http://jsfiddle.net/xSNBp/)

$('input').focus().effect('shake', { times: 3, distance: 2 }, 30);

扼杀了焦点。这是一个bug吗?我的问题是,当抖动效果被触发时,我不知道哪个元素当前被聚焦,所以我不能重新聚焦它。有什么建议吗?

(如果这是一个bug,我应该怎么做?)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-31 04:45:21

我们最近将a commit升级到了master / 1.8,以修复带有一些效果的焦点问题。你有没有尝试过使用git中的jQuery UI版本?甚至是UI 1.8.16?

请参阅http://bugs.jqueryui.com/ticket/7595,了解需要该修复的错误。

以下是一个解决方法,可以在较早的1.8代码中为您修复此问题:

代码语言:javascript
运行
复制
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();
       }
    }
}

如果这不是您遇到的问题,请在bug跟踪器上让我们知道。

发生这种情况的原因是,当您将一个焦点元素“包装”或附加到DOM中的其他位置时,它就失去了焦点。因此,我们必须在createWrapperremoveWrapper中添加一个检查以保持焦点。

票数 3
EN

Stack Overflow用户

发布于 2011-08-30 22:12:02

您可以尝试以下操作。基本上,您只需保存放入焦点的元素,以便您可以在动画完成后重新聚焦它。

代码语言:javascript
运行
复制
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();
    });
票数 3
EN

Stack Overflow用户

发布于 2011-08-31 04:59:50

这样做如何:

代码语言:javascript
运行
复制
$('input').keypress(function() {
    var el = $(this);
    el.effect('shake', {
        times: 10,
        distance: 5
    }, 30, function() {
        el.focus()
    });
})

jsFiddle

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7244558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档