2012-07-26 34 views
2

我的jquery對話框在Firefox中無法正常工作,但Firebug不會給我任何錯誤。我的對話框在Chrome中運行得很好。firefox中的jquery對話框問題:第一次打開後無法輸入

情況: 我有幾個jQuery對話框在我的網頁上打開不同的事件。一個「添加新元素」對話框給我一個問題。第一次打開對話框時效果很好。隨後的任何時候,文本輸入框都不能被點擊或鍵入。我想我通過每次銷燬對話框來解決問題。然後,每當你打開它時它就會起作用。但後來我發現是否有其他對話框打開,然後這個「添加新元素」對話框打開,同樣的事情再次發生:無法輸入框中。

我很困惑!請任何幫助,將不勝感激...我一直盯着這個代碼幾天了。

這裏是jQuery的對話框代碼:

$(function() { 

    $("#dialog-new-osc-el").dialog({ 
     resizable: false, 
     autoOpen: false, 
     height:300, 
     width:400, 
     modal: true, 
     buttons: { 
      "Create": function() { 

*create button function stuff here* then: 

      $(this).dialog("destroy"); 
     $(this).dialog("close"); 
        create_new_osc_el_dialog(); 
      }, 
      Cancel: function() { 
      $(this).dialog("destroy"); 
       $(this).dialog("close"); 
       create_new_osc_el_dialog(); 
      } 
     }, 
      close: function() { 
      $(this).dialog("destroy"); 
       $(this).dialog("close"); 
       create_new_osc_el_dialog(); 
      } 
    }); 
}); 

而當打開該對話框中的 「添加新的元素」 被點擊的div上 - 的div有一個onclick功能:

<div class="addnewbox" onclick="addneweltoosc();"> 

此的onclick函數看起來像這樣(爲了簡潔起見刪除了一些代碼):

function addneweltoosc(){ 
       $("#dialog-new-osc-el").dialog("open"); 
} 

對話框的實際HTML很長,這裏是重要的東西:

<div id="dialog-new-osc-el" title="Create Element"> 

<div id="new_osc_el_type" class="pointer"> 
<ul> 
<li onclick="new_osc_el_type_chosen('Branch');">Branch</li> 
<li onclick="new_osc_el_type_chosen('Group');">Group</li> 
<li onclick="new_osc_el_type_chosen('Division');">Division</li> 
<li onclick="new_osc_el_type_chosen('Unit');">Unit</li> 
<li onclick="new_osc_el_type_chosen('Strike Team');">Strike Team</li> 
<li onclick="new_osc_el_type_chosen('Task Force');">Task Force</li> 
<li onclick="new_osc_el_type_chosen('Individual Resource');">Individual Resource</li> 
</ul> 
</div> 
<p><input class="hide" type="text" id="new_osc_el_pos_name" /> 
</div> 

該對話框首先給用戶一個可供選擇的列表。當用戶點擊一個列表項時,調用new_osc_el_type_chosen函數。該功能隱藏該列表並顯示「new_osc_el_pos_name」文本輸入。 這是首次打開對話框時輸入框的輸入框,但不是之後。這是代碼:

function new_osc_el_type_chosen(a) 

{ 
$("#new_osc_el_type").addClass("hide"); 
$("#new_osc_el_pos_name").removeClass("hide"); 
if (a=="Branch") 
{ 
$("#new_osc_el_pos_name").val("NAME of Branch Director"); 
} 
document.getElementById("new_osc_el_pos_name").setSelectionRange(0,7); 
$("#new_osc_el_pos_name").focus(); 
} 

解決了!

顯然,所有的模態對話框都會導致它們之間的衝突......或者某種東西。其實,我不是100%肯定爲什麼 - 但改變模態:真正的模態:​​錯誤解決了我的問題。

+0

我有兩次類似的問題,每個都有自己的修復(IIRC)。第一次是當我使用jQuery UI的對話框(我需要使用modal:true),我認爲這個問題與z-index屬性有衝突(我的輸入太低)。第二次是用自制軟件元素,這是因爲我在受影響的輸入上測試了.disableSelection(),並忘記了這一點。 – 2012-09-06 18:25:24

+1

有同樣的問題!很煩人!設置模態:假也適用於我,但我不想陷入困境,所以請在下面查看我的答案,以找到解決方案,爲我解決這個問題,並仍然提供模態行爲。 – nothingisnecessary 2013-04-26 18:08:03

回答

0
  • 毀滅然後關閉似乎作爲一個操作順序奇怪。
  • create_new_osc_el_dialog()功能好像它可能是相關
  • 的事實,你必須圍繞「創建」引號,但不取消似乎很奇怪,並與它是壓痕,我不能完全告訴你{} S是否是在正確的地方。

如果您打開了不同的對話框,然後第一次打開「添加新元素」,或者僅在您打開和關閉「添加新元素」的情況下以及還有有另一個對話框打開?

多年來,jquery dialog和firefox顯然有許多問題。你使用的是什麼版本的JQuery和Firefox?

我聽說過一個類似問題的建議,您嘗試將對話框div設置爲style="position:fixed",但我不知道這是否能解決您對此問題的具體化身。

+0

create_new_osc_el_dialog()是在我銷燬它之後再次重新創建對話框的函數。我甚至不知道我嘗試了很多東西來實現它! ; p我從來沒有遇到過jquery和firefox的問題,之前......奇怪。無論如何,我已經解決了它,純粹意外。不管怎麼說,還是要謝謝你! – webdevneedslilhelp 2012-07-27 20:24:30

2

我和Firefox有同樣令人討厭的問題。所有其他瀏覽器運行良好。

我注意到的是有定義的一個以上的對話(都與autoOpen: false定義頁面的問題,所以他們不開,直到用戶點擊一個按鈕觸發dialog("open")

我有兩個簡單的對話,每一個input type="text",並有兩個按鈕(input type="button",對於「取消」和「OK」)

我可以通過使用對話框重現,但一個簡單的測試與一個對話框工作:

  1. 打開一個直徑登錄。我可以在第一次輸入框中輸入文字。
  2. 單擊右上角的X關閉對話框。
  3. 從#1打開相同的對話框。在除Firefox之外的所有瀏覽器中,我可以在框中輸入內容。在Firefox中,一切看起來都很好(模態層位於對話框的後面,但在其他所有位置之前),但根本無法工作。

我試着增加輸入及其對話框div的z-index。我試圖減少模態層的Z指數。我甚至刪除了模態div元素。這些沒有效果。然後我在jquery-ui.js中搜索「modal」(使用jQuery UI - v1.9.2),發現這個部分是問題(我確認通過註釋輸入問題消失了)。問題

來源,從jQuery的ui.js(1.9.2):

// adjust the maxZ to allow other modal dialogs to continue to work (see #4309) 
if (this.options.modal) { 
    maxZ = 0; 
    $(".ui-dialog").each(function() { 
     if (this !== that.uiDialog[0]) { 
      thisZ = $(this).css("z-index"); 
      if (!isNaN(thisZ)) { 
       maxZ = Math.max(maxZ, thisZ); 
      } 
     } 
    }); 
    $.ui.dialog.maxZ = maxZ; 
} 

我發現#4309在jQuery UI的bug跟蹤系統:http://bugs.jqueryui.com/ticket/4309

它出現的問題是對於所有的瀏覽器都是固定的,但問題仍然存在於Firefox中(至少在我使用的版本中) - 現在即使您打開/關閉/重新打開其中一個對話框也會出現此問題(所以其他對話框在那裏,但從來沒有「打開」呼籲他們)。

爲我工作的破解補丁是裝載jQuery的ui.js後,要做到這一點:

if ($.browser.mozilla) 
{ 
    // fix firefox z-index bug with modal jquery UI dialog that prevents user from typing after initial modal dialog opened 
    $.fn.dialogOriginal = $.fn.dialog; // save original dialog() function 
    $.fn.dialog = function() 
    { 
     if (!$(this).data("fixModalZIndex")) 
     { 
      // bind events only once 
      $(this).data("fixModalZIndex", true).bind("dialogbeforeclose", function (event, ui) 
      { 
       // unhook modal behavior to fix firefox bug 
       $(this).dialog("option", "modal", false); 
      }).bind("dialogclose", function (event, ui) 
      { 
       var ref = $(this); // save reference for later 
       setTimeout(function() 
       { 
        ref.dialog("option", "modal", true); // set back to modal, but in a timeout to avoid the z-index input bug 
        ref = null; 
       }, 0); 
      }); 
     } 
     return $.fn.dialogOriginal.apply(this, arguments); // call original dialog function 
    }; 
} 

真的不明白這一點。這可能有助於通過maxZ邏輯進行調試,但我不是火狐的粉絲,而且自從我的黑客修復工作後,我準備關閉這張票並回去修復自己的錯誤而不是修復jQuery。希望這個信息有助於某人,聽起來像你已經決定去模態:錯誤的路線(這也適用於我,但客戶真的想它的模態...)

+0

非常感謝你的黑客/修復工作。我花了幾個小時試圖弄清楚,你救了一天! – Adosi 2017-07-25 15:51:49

0

我也有這個問題,它轉身當modal覆蓋層比textbox更高z-index時,將成爲z-index問題。

感謝this StackOverflow question我很快發現了原因並能解決我的問題。