当页面长于窗口时,jQuery拖放不能正常工作

时间:2013-01-03 18:38:17

标签: jquery internet-explorer drag-and-drop

我已经在我的应用程序中实现了jQuery拖放功能,除了IE之外,它可以在任何地方工作,如果页面小于窗口(没有滚动条),它也可以在那里工作。如果页面太长而且可拖动位于底部附近,则每次拖动都会导致页面跳回到顶部,随后在项目移动时内容会随之闪烁。谁看过这个吗?启动可排序的代码几乎是单行代码:

jQuery('#childrenlist').sortable({items:'div', update:updateChildrenOrder});

更新:我可以通过设置scroll:false并设置容器的高度来消除生涩的闪烁,如下所示:

jQuery('#childrenlist').sortable({
    items:'.sortrow', 
    scroll: false,
    update:updateChildrenOrder,
    create:function(){
        jQuery(this).height(jQuery(this).height());
    }
});

排序仍然不起作用,因为当我开始拖动任何元素时,拖动的元素仅出现在页面的最顶部(屏幕外)。

2 个答案:

答案 0 :(得分:1)

我在一个有相同症状的问题上花了一天多的时间。它只在IE中。符合标准的浏览器没有这些错误:

  1. 摇摇欲坠的对话框。
  2. 打开时jQuery UI对话框位置未居中或在开口之间记住。
  3. jQuery UI Dialog调整大小导致子DIV意外收缩。
  4. 对我而言,归结为缺少DOCTYPE声明。我希望这有助于其他人。我还没有测试过所有的DOCTYPE。我的解决方案已通过XHTML 1.0 Strict证明。

    研究类似问题,我发现information关于窗口偏移的错误计算,这对我来说很有意义。如果DOCTYPE没有帮助,我会追求那个角度。

答案 1 :(得分:0)

是的原因之一可能是缺少或不正确的DOCTYPE声明。此外,如果您希望IE在标准模式而不是怪异模式下工作,那么在IE中的DOCTYPE声明之前绝对不应该(甚至不是注释)。 Quirks模式会错误地渲染CSS,并且还会对CSS框模型进行自己的修改,这可能是由于位置计算不正确导致jQuery拖放问题的根本原因。这样做:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
<title>Insert title here</title>
</head>
<body>
Content here
</body>
</html>