2012-10-12 16 views
3

我有一個jQuery確認對話框,當用戶按下時,不會觸發與默認按鈕相關的事件輸入;當我使用鼠標時,按鈕的行爲如預期。jQuery對話框不響應鍵盤按下

默認按鈕('取消')確實突出顯示當我按下輸入,但沒有其他事情發生。

這是對話框:

enter image description here

這裏是產生上面的對話框代碼:

$(document).ready(function() { 

    $('#m_btnNext').click(function (e) { 
      var my_messages = 'warning'; 
      if (my_messages.length > 0) { 
       e.preventDefault(); 
       $('#dialog-confirm-withdraw').html(my_messages); 
       $("#dialog-confirm-withdraw").dialog("open"); 
       return false; 
      } 
      return true;  
      }); 

     var cascadeConfirmWithdrawMarkup = "<div id='dialog-confirm-withdraw' title='Withdraw'><p>Set on build</p></div>"; 
     $(cascadeConfirmWithdrawMarkup).appendTo('body').hide(); 

     $('#dialog-confirm-withdraw').dialog({ title: '<span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span>Withdraw Warnings', 
      width: 400, 
      height: 175, 
      resizable: false, 
      draggable: false, 
      modal: true, 
      autoOpen: false, 
      open: function() { 
       $('.ui-dialog-buttonpane button:eq(1)').focus(); 
      }, 
      buttons: { 
       "Proceed with withdraw": function() { 
        $(this).dialog("close"); 
       }, 
       "Cancel": function() { 
        $(this).dialog("close"); 
       } 
      } 
     }); 
}); 

最簡單的形式,this code works fine,但我有見真章了巨大的困難,匪徒在我的真實的形式。

我註釋掉了所有其他的javascript,所以只有上面的代碼存在;沒有錯誤記錄到控制檯;但沒有任何反應。

如果在我上面的js中沒有明顯的錯誤,那麼在這個草垛中找到針的最佳方法是什麼?

masochists可以下載完整的HTML頁面(所有javascript),here。我使用FF的另存爲「網頁,完整」來創建該壓縮文件。

請記住,我只是在此表單中添加功能;我沒有創建它。

+0

在您的*真實*表格上,當您按下回車鍵時,取消按鈕是否確實專注於?你提到突出顯示,但只是想仔細檢查。您可以按Tab切換瀏覽器上的表單域來測試這一點,因爲您無疑已經知道這一點。 – martinwnet

+0

您是否有任何附加到文檔的按鍵事件? – epascarello

+0

我們需要了解您的真實形式中還有哪些其他活動。請發佈整個代碼。 –

回答

1

在halcyonCommon.js中,您有一個名爲KeyListener()的函數,它在文檔加載時調用。這功能增加了對的keydown事件偵聽器,它似乎是處理逃生和進入的keydown事件整個文檔

 case KeyCode.Enter:    
      if (el.tagName == "INPUT") {      
       switch (el.type) { 
        case "checkbox" : 
        case "password" : 
        case "radio" : 
        case "text" : 
         { //Check for datebox and timebox, has controller --> onblur before click OK 
          if (el.Controller && el.Controller.onblur) 
           el.Controller.onblur({target : el}); 

          return oThis.clickAction(oThis._DefaultButton, e); 
         } 
        break;      
        case "file" ://ThamHNguyen, added 14-NOV-06 
         return oThis.clickAction(oThis._DefaultButton, e); 
         break; 

        default: 
         return true; 
       } 
      } else if (el.tagName == "SELECT") { 
       return oThis.clickAction(oThis._DefaultButton, e);    
      } else if (el.tagName == "HTML" || el.tagName == "BODY" || el.tagName == "TD") { //"TD" : on IE only 
       return oThis.clickAction(oThis._DefaultButton, e);    
      } else if (el.tagName == "TEXTAREA" || el.tagName == "A") { 
       return true; 
      } else { 
       return false; //Prevent default button of IE 
      } 

看到最後別的情況?刪除可以解決問題,但可能會導致程序中其他地方出現意外行爲。如果是這樣,你需要添加第三個可能的場合對該行​​返回true(因此允許正常的行爲):

} else if (el.tagName == "TEXTAREA" || el.tagName == "A") 

例如:

} else if (el.tagName == "TEXTAREA" || el.tagName == "A" || el.tagName == "SPAN") 

...雖然這可能不夠具體。