2009-05-22 43 views
1

我有一个jQuery UI对话框,它承载了一些按钮。jQuery UI对话框窃取重点

我想在这些按钮上有键盘控件(tab-navigation),所以在对话框的打开事件处理程序中,我将第一个按钮设置为焦点。

我可以清楚地看到这些作品,并使用document.activeElement对其进行验证,但重点被盗,其他重点也被关注。

到了这个时候,我不知道我应该怎么看重什么,因为我没有任何进一步的钩子。

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

如果你有兴趣,我的代码是这样的(修正案增加了福克斯如下所述)

在doc.ready - 我还添加了jQuery的按钮它 - 但他们不” t似乎对所有的键盘事件做出了响应 - 但这是一个单独的问题。

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

正如你所看到的,我尝试过在事件中添加事件处理程序,但没有任何反应!

回答

1

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

+0

谢谢,遗憾的是这个没有工作,一个有趣的解决方案 - 我已经编辑我的Q和添加的代码段。另一个BIG Q我(我想我将作为一个单独的问题打开)是内置按钮(使用按钮选项)根本不需要键盘输入。我可以看到jQuery UI在显示时将焦点设置为其中的一个,但唯一可用的键盘事件是关闭对话框的ESC! :( – Duncan 2009-05-22 11:13:17

1

好的,我看到了什么问题。

该对话框设置为模态。

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

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

PS如果有人知道如何做到这一点他们的头顶,让我知道!