我正在尝试使用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/
答案 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;
创建了错误,但我希望下次更新可以解决问题。