JQuery UI Диалог крадет фокус - PullRequest
1 голос
/ 22 мая 2009

У меня есть диалоговое окно jQuery UI с несколькими кнопками.

Мне бы хотелось, чтобы на этих кнопках было управление с клавиатуры (навигация по вкладкам), поэтому в обработчике открытого события для диалога я установил первую кнопку в фокусе.

Я вижу, как это работает, а также проверяю его, используя document.activeElement, но затем фокус фокусируется и что-то еще фокусируется.

К этому времени я не знаю, как я должен видеть то, на чем фокусируется, поскольку у меня больше нет крючков.

Кто-нибудь еще заметил подобную проблему?

Если вам интересно, мой код такой (исправлено, чтобы добавить Фокус, как описано ниже)

в doc.ready - note Я также добавил к нему кнопки jQuery - но они, похоже, совсем не реагируют на события клавиатуры - но это отдельный вопрос.

        $("#dialogSearchType").dialog
        (
            {
                bgiframe: true,
                height: 180,
                width: 350,
                modal: true,
                autoOpen: false,
                show: 'drop',
                hide: 'fold',
                buttons: { "Street": function() { HandleSearchStreetClick(); $(this).dialog("close"); },
                    "Property": function() { HandleSearchPropertyClick(); $(this).dialog("close"); }
                },
                focus: function(event, ui) { $("#btnSearchTypeProperty").focus(); }
            }
        );


    <div id="dialogSearchType" class="searchDialog" style="width: 280px; display: none" title="Search For..." onkeyup="HandleSearchTypeDialogKeyUp(event)">
        <span>What would you like to search for?</span>
        <br />                
                     <input type="button" tabindex="1" id="btnSearchTypeStreet" class="button" value="Street" onclick="HandleDialogSearchStreetClick()" />
        <input type="button" tabindex="2" id="btnSearchTypeProperty" class="button" value="Property" />           

    </div>

Как видите, я пытался добавить обработчики событий, но ничего не происходит!

Ответы [ 3 ]

1 голос
/ 22 мая 2009

Хорошо, я вижу, в чем проблема.

Диалог установлен как модальный.

jQuery будет перехватывать события клавиатуры на уровне документа и отменять их.

Я думаю, что это отстой, поэтому я пытаюсь обойти этот обработчик событий и добавить свой собственный.

PS Если кто-нибудь знает, как сделать это на макушке, дайте мне знать!

1 голос
/ 22 мая 2009

Попробуйте использовать обработчик события фокуса вместо открытого обработчика события и посмотрите, поможет ли это. Я думаю, что это, вероятно, более правильно, поскольку, если диалог не модальный, вы, вероятно, хотите, чтобы кнопка по умолчанию получала фокус каждый раз, когда диалог фокусируется, а не только когда он открывается. Если это не сработает, я бы посоветовал вам добавить код к вашему вопросу.

0 голосов
/ 23 января 2014

Здесь вы можете найти интересное решение, которое сработало для нас

jQuery UI Фокус кражи

...