2012-07-26 38 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我很快发现了原因并能解决我的问题。