Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 元素相对位置为don';更新DOM时不移动(IE6和IE7)_Javascript_Css_Internet Explorer_Dom - Fatal编程技术网

Javascript 元素相对位置为don';更新DOM时不移动(IE6和IE7)

Javascript 元素相对位置为don';更新DOM时不移动(IE6和IE7),javascript,css,internet-explorer,dom,Javascript,Css,Internet Explorer,Dom,我有一张有几个字段集的表格。一个字段集有一个由用户设置的时间首选项表。用户可以添加和删除时间首选项。当他们添加一行时,使用jQueryappend()将一个表行动态插入DOM 问题在于,在IE6和IE7中,当添加新表行时,页面上任何相对定位的元素都不会“碰撞”。此外,当删除表行时,它们也不会移动。他们只是停留在自己的位置上 这将相对较小,但每个字段集都相对定位,以避免字段集出现IE后台溢出问题。因此,在向表中添加两行或更多行之后,表单的效果非常糟糕 以下是应用于字段集的CSS: form.pan

我有一张有几个字段集的表格。一个字段集有一个由用户设置的时间首选项表。用户可以添加和删除时间首选项。当他们添加一行时,使用jQuery
append()
将一个表行动态插入DOM

问题在于,在IE6和IE7中,当添加新表行时,页面上任何相对定位的元素都不会“碰撞”。此外,当删除表行时,它们也不会移动。他们只是停留在自己的位置上

这将相对较小,但每个字段集都相对定位,以避免字段集出现IE后台溢出问题。因此,在向表中添加两行或更多行之后,表单的效果非常糟糕

以下是应用于字段集的CSS:

form.pancake fieldset {
    position: relative;
    margin-top: 1.5em;
    padding-top: 1.5em;
}
form.pancake fieldset legend {
    position: absolute;
    top: -0.5em;
    left: 0.5em;
}
当从样式表中删除
位置:relative
时,动态添加的行可以完美地工作,并且内容可以适当地向下移动


非常感谢您的帮助。

是的,说到这一点,IE真的很痛苦。我发现我实际上必须强制它重新绘制DOM元素,以使其移动。我是如何快速隐藏和显示父对象的,在您的情况下,它听起来像是您所在行的父对象。这不是最优雅的解决方案,但它确实起到了作用

在我的例子中,我使用jQuery来完成工作

var forceRedraw = function(obj) {
    /// <summary>Forces a redraw of passed objects.</summary>
    /// <param name="obj" type="jQuery" optional="false">The object for force the redraw on.</param>

    obj = $(obj);

    // force IE to redraw the obj
    if (jQuery.browser.msie) {
        obj.css("display", "none");
        obj.css("display", "block");
    }
};
var forceRedraw=函数(obj){
///强制重画传递的对象。
///用于强制重画的对象。
obj=$(obj);
//强制IE重新绘制obj
if(jQuery.browser.msie){
对象css(“显示”、“无”);
对象css(“显示”、“块”);
}
};

我最近遇到了同样的问题。我最终发现,只有当我的相对定位元素包含在另一个相对定位元素中时,才会发生这种情况


虽然我无法更改元素本身的定位样式,但我能够从包含元素中删除position:relative,从而解决了问题。这可能是一个很好的替代解决方案,尤其是在一个有大量操作的页面上,这些操作可能会导致元素移动。

只需设置className属性:“obj.className=obj.className”,就可以让IE重新绘制。然后,重要的问题是找到要强制重新绘制的元素;它最好是行为不端元素的直接容器,以避免给浏览器太多的工作要做。哎呀,我上一条评论右侧的“className”大写错误(为什么我们不能编辑评论?)非常感谢,Nick Berardi。这为我节省了很多工作这就是我要找的。愚蠢的IE。有时候在IE7中,比如使用
.append
,dom元素就消失了。这会解决它的。