2012-09-05 80 views
2

我試圖打開qtip(v2.0.0),並讓它專注於鏈接 - 菜單中的第一項。 (更一般地說,我試圖用這個美妙的qtip作爲一種上下文菜單,並將注意力放在第一個li /菜單項上,以便他們可以方便地按下Enter而不必點擊)所以...如何專注於qtip內的元素(jQuery插件)

$("tr.request td").qtip({ 
     content : { 
      text: $('#qtipMenu').clone(), 
      title : {button : true, text : ' '} 
     }, 
     position : {my : 'bottom center' , at : 'top center'}, 
     show : {event : 'click'}, 
     hide : false, 
     events : { 
      show : function(){ 
       var selector = "#" + this.id + " ul > li:first > a " ; 

       // for the sake of experiment... 
       $(selector).focus(function(){console.warn("focus on this "+this.tagName + " element!") }) 
       // and the callback fires, but... 
       $(selector)[0].focus(); // doesn't work 
       $(selector).focus(); // doesn't work either 
       // nor does this: 
       $("div.ui-tooltip-content ul > li:first > a").focus(); 
       // ...though I know I'm definitely addressing this element 
       // and can manipulate it in other ways 
      }, 
      render : function(event) { 
       $("div.ui-tooltip-content ul").removeAttr('id').show() 
      } 
     } 
    }); 
} 

FWIW,每個qtip的內容從一個隱藏的UL元件克隆,從而:

<ul id="qtipMenu" style="display:none" class="qtip-menu"> 
    <li><a href="admin/requests/view">view details</a></li> 
    <li><a href="admin/requests/add">add to schedule</a></li> 
    <li><a href="admin/requests/delete">delete</a></li> 
</ul> 

和是它纏繞的(文檔)$。就緒內部(函數(){})。 「焦點」事件處理程序按預期觸發,但瀏覽器UI的實際焦點沒有發生(希望我清楚地解釋自己)。

任何想法?

+0

...但我發現如果我第一次點擊工具提示中的某個地方,然後在控制檯中運行這個命令,就可以運行這個控制檯。 focus();' 它確實有效。那麼,如何以編程方式實現相同? – David

回答

5

答案是......做到「可見」而不是「顯示」。 「可見」發生在「顯示」之後

$(myTarget).qtip({ 

    events: { 
     visible : function() { $(myElementWithinTheTooltip).focus() } 
    } 
); 

它可以爲別人節省幾個小時的痛苦。我會把它留給你忍者來解釋時間的內在微妙性引起了我的問題。

+1

它爲我節省了幾個小時的痛苦。謝謝大衛:D –

+0

對我而言,謝謝:) –