2

我有一个 jQuery UI 对话框,其中包含许多按钮。

我想对这些按钮进行键盘控制(选项卡导航),因此在对话框的打开事件处理程序上,我将第一个按钮设置为焦点。

我可以明显地看到这个工作,并且还使用 document.activeElement 验证它,但是焦点随后被盗并且其他东西得到焦点。

到这个时候,我不知道我应该如何看到有焦点的东西,因为我没有任何进一步的钩子。

有没有其他人注意到类似的问题?

如果您有兴趣,我的代码是这样的(修改为添加焦点,如下所述)

在 doc.ready -注意我还添加了 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>

如您所见,我一直尝试添加事件处理程序,但没有任何反应!

4

3 回答 3

1

好的,我明白了问题所在。

该对话框设置为模态。

jQuery 将在文档级别拦截键盘事件,并取消它们。

我认为这很糟糕,所以我正在尝试一种解决方法来销毁这个事件处理程序并添加我自己的。

PS如果有人知道如何做到这一点,请告诉我!

于 2009-05-22T11:51:35.200 回答
1

尝试使用焦点事件处理程序而不是打开事件处理程序,看看是否有帮助。我认为这可能更正确,因为除非对话框是模态的,否则您可能希望默认按钮在每次对话框获得焦点时都获得焦点,而不仅仅是在它打开时。如果这不起作用,那么我建议您将代码添加到您的问题中。

于 2009-05-22T10:49:44.560 回答
0

在这里您可以找到对我们有用的有趣解决方案

jQuery UI 焦点窃取

于 2014-01-23T09:06:38.293 回答