IE的jQuery UI对话问题

Dan*_*ard 26 internet-explorer jquery-ui modal-dialog

我正在使用新的jQuery 1.3.2和jQuery-ui-1.7库以及UI对话框.我有一个div标签,里面有几个表单元素(文本框,复选框等).在页面加载时,jQuery将div显示为对话框.这在FF中工作得非常好,但在IE中,div的高度是错误的.它只是显示标题栏的一些内容.我在创建div时明确设置了高度.如果在打开对话框后设置高度选项,则会更正高度,但内容为空(显示文本框的前三分之一).如果我允许对话框可调整大小,如果你在IE中调整它的大小它工作正常,但我不想强迫IE用户调整大小只是为了看到内容.有任何想法吗?这是我用来创建对话框的代码:

$('#dialogDiv').dialog({ 
    bgiframe: true, 
    height: 400, 
    width: 620, 
    modal: true, 
    draggable: true, 
    resizable: false, 
    close: function(event, ui) {
        if($('#agree').val() != '1')
            location.href = 'somepage.html';
    }
});
Run Code Online (Sandbox Code Playgroud)

Mon*_*han 30

在做了一些Google搜索后,我找到了问题的真实答案.它是由不兼容的Doctype引起的.有关更多信息,请访问http://osdir.com/ml/jquery-ui/2009-08/msg00388.html.

我在我的代码上试了一下,这个URL中的解决方案可以解决问题.

  • 这是问题的真正答案.我有同样的问题,包括DOCTYPE确实解决了jQuery的一些样式问题. (6认同)
  • 非常感谢你.这真的解决了这个问题.IE糟透了 (2认同)

jua*_*gan 19

我在IE7中遇到了同样的问题,并深入研究了症状和解决方案.我注意到当我创建一个没有内容的虚拟对话框时,高度正确呈现.因此,我开始玩各种类型的内容,看看我是否可以用不同的方式编写内容来克服这个问题.没运气.然而,我发现,我添加的内容越多,IE7中的对话框就越短(甚至隐藏的项目也会缩短一点).因此,简单的内容可能不会产生太大的影响(因此,在这个问题上缺乏更多的投诉).我正在添加的表和许多表单项创建了非常明显的效果.

将高度设置为auto可以很好地工作但是IE7仍然错误地计算了我的内容的高度大约10个像素太短(可能是对象上的填充高度),因此jQuery添加了滚动条.不完美,但接受以下内容可接受.

由于未能找到另一种解决方法,我开始研究DOCTYPE解决方案.我发现我们网站的DOCTYPE - 尽管它看起来是正确的 - 它实际上将所有浏览器都置于"Quirks模式"中,这是问题的真正来源.我怀疑jQuery支持怪癖模式问题所以我怀疑这将永远修复.

我目前的DOCTYPE:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

应该是什么:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

即使这个较旧的DOCTYPE工作:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/transitional.dtd">

因此,不是DOCTYPE必须是HTML 5的值<!DOCTYPE html>,它必须是有效的DOCTYPE(HTML 4或5 - 不确定XHTML)才能将IE7设置为除quirks模式之外的其他东西(Firefox工作原理)好的,无论哪种方式).看到:

http://en.wikipedia.org/wiki/Quirks_mode#Comparison_of_document_types

我没有选择更改我们网站的DOCTYPE所以我必须使用其他解决方案,如自动高度.我注意到在使用jQuery Dialog时怪癖和标准模式之间还存在其他差异所以我也必须处理它们(即,在IE7和Firefox中,字体大小百分比的累积方式不同).


Dan*_*ard 0

我已经回答了我自己的问题。我只需要使用对话框的高度属性和对话框中的一些元素即可。好叫我!

  • 这并不能回答问题。 (3认同)
  • 我可以确认,在传递给dialog({...}) 的对象中不指定height 属性可以使其在IE 中正常工作。我不知道为什么。 (3认同)