2011-08-30 67 views
2

jQuery震動效果似乎殺死了被震動元素的焦點。例如(見http://jsfiddle.net/xSNBp/震動效果殺死焦點

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

殺死的焦點。這是一個錯誤?我的問題是,我不知道當搖動效果被觸發時當前聚焦的是什麼元素,所以我無法重新調整焦點。有什麼建議麼?

(如果這是一個錯誤,我該怎麼辦?)

+0

嗯不管是搖晃什麼元素,你說,頁面上的任何元素失去焦點? – Loktar

+0

@Loktar:是的。那麼,準確地說,我正在搖動一羣孩子的父母。孩子們失去焦點。 – Randomblue

+2

是的,它看起來像是一個疏忽,而不是一個錯誤。提高票價http://bugs.jqueryui.com/ – redsquare

回答

3

我們最近推a commit掌握/ 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(); 
     } 
    } 
} 

如果這不是您所遇到,請讓我們知道的bug跟蹤系統的問題。

它發生的原因是,當你「包裝」或附加一個焦點元素到DOM中的其他地方 - 它失去了焦點。所以我們必須添加支票createWrapperremoveWrapper以保持焦點。

+3

+1看到jQueryUI團隊的成員進來解決問題時,它非常棒。 – Loktar

+0

那就是當你將一個堆棧溢出問題鏈接到一個bug ticket時會發生什麼:http://bugs.jqueryui.com/ticket/7681 :) – gnarf

+1

使用1.8.16取得了訣竅!謝謝gnarf。 – Randomblue

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

+0

「我的問題是,我不知道當搖動效果被觸發時目前的焦點是什麼,所以我無法重新調整焦點。」 – redsquare

+0

好的,刪除答案。 – Loktar

+0

@Randomblue好的嘗試以上,它應該工作。 – Loktar

2

如何做這種方式:

$('input').keypress(function() { 
    var el = $(this); 
    el.effect('shake', { 
     times: 10, 
     distance: 5 
    }, 30, function() { 
     el.focus() 
    }); 
}) 

jsFiddle