2009-05-22 41 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如果有人知道如何做到這一點他們的頭頂,讓我知道!