2

qtip (v2.0.0) を開いて、メニューの最初の項目であるリンクにフォーカスしようとしています。(より一般的には、この素晴らしい qtip を一種のコンテキスト メニューとして使用し、最初の li/menu 項目にフォーカスを置いて、クリックするのではなく Enter キーを押すことができるようにしようとしています。)

$("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>

はい、$(document).ready(function(){}) 内にラップされています。「フォーカス」イベント ハンドラーは期待どおりに起動しますが、ブラウザー UI の実際のフォーカスは発生していません (私が自分自身を明確に説明していることを願っています)。

何か案は?

4

1 に答える 1

6

そして答えは...「表示」ではなく「表示」でそれを行うことです。「表示」は「表示」の後に発生します

$(myTarget).qtip( {

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

それが他の誰かの数時間の苦痛を救うことができますように。タイミングの内部の微妙さが私の問題を引き起こしたものを説明するのは忍者に任せます。

于 2012-09-06T15:26:46.413 に答える