复选框无法在对话框ui中检查

时间:2012-06-30 03:29:32

标签: jquery jquery-ui z-index jquery-ui-dialog

我正在尝试使用jQuery UI对话解决z-index问题,类似于问题Can't select or deselect checkboxes inside jQuery UI Modal Dialog,知道那里有bug report

因此,在尝试按照建议启动z-index时,我添加了以下代码:

$('#interface').click(function(evform){
  $('#interface').prop('z-index')=99999;
});

chrome和firefox console.log声明:

  

未捕获的ReferenceError:分配中的左侧无效

然而,尽管出现错误,该复选框现在可以正常工作(每次都抛出控制台错误)。如果我删除违规行,则该复选框变为“不可点击”。我该如何正确编码?

我的HTML:

<div id="dialog" title="Loading...">
    <p id="interface">Loading...</p>
</div>

(顺便说一下,我尝试在<p>添加内联样式,但它不起作用:

<p id="interface" style="z-index:99999">Loading...</p>

使用AJAX,我用有效的复选框html替换'#interface'的内容,例如:

<label for="right">
  <input name="right" type="checkbox">
</label>

我包含了常用的jQuery / Dialog UI文件。

最后一点,我试图发挥创意,因为这不起作用并通过以下方式手动切换复选框:

if ($(evform.target).prop('type')=="checkbox"){
      $(evform.target).checked;
}

*编辑更新*

截至2013年12月22日(EDGE预发行版)的jQuery核心,此错误已得到修复。我希望他们很快发布稳定版(我相信它将是v1.10)!您可以在jjiddle中对其进行测试:http://jsfiddle.net/tj_vantoll/XXGQA/

http://bugs.jqueryui.com/ticket/6267

3 个答案:

答案 0 :(得分:5)

您必须在z-index上设置#dialog,而不是#interface

您的代码正在抛出错误,因为您正在尝试为函数调用分配值。所以你的代码应该是:

$('#interface').click(function(evform){
  $('#dialog').css('z-index', 99999);
});

或者只是在你的CSS上:

#dialog { z-index: 99999; }

<强>更新

此解决方案不是防弹的。为jQueryUI提交的错误报告指出,如果复选框的z-index低于对话框下方的叠加层,则会出现问题。 jQueryUI似乎是以绝对的方式比较z索引,这违反了CSS标准(但是可以理解,考虑到适当的比较可能是资源密集型的)。

因此,实际的解决方案可能取决于您在对话框中设置z-index(和position)的元素。为了避免这个错误,不要在对话框中使用z-index,或者设置一个值保证高于(动态)分配给叠加层的值(因此,我的99999建议)。

答案 1 :(得分:1)

$('#interface').click(function(evform){
  $('#interface').prop('z-index')=99999;
});

应该是

$('#interface').click(function(evform){
  $('#interface').prop('z-index', 99999);
});

第二个参数(如果提供)将属性设置为其值。

答案 2 :(得分:1)

问题原来是我点击编码中的return false;

$('#interface').click(function(evform){
  *** did stuff here ***

   evform.preventDefault;
   return false; //This is the offending line of code
});

对于诊断,我想查看页面上有更高z-index的内容,因此我添加了:

$('*').each(function(){
    if ($(this).css('z-index')>99) { 
        console.log ($(this).css('z-index')+", " + $(this).prop('class'));
    }
});

它给了我所有z分度高于99的元素。事实证明ui对话框通常设置为1001或1002,所以@bfavaretto列出的'99999'足够高。

仍然不知道为什么return false;创建了错误,但我希望下次更新可以解决问题。