3

我有一个元素列表,我想使用 Jquery UI 对其进行排序和调整大小。将它们结合起来在 Chrome 和 Firefox 中效果很好。但是在 IE8 中(无论是在正常视图还是在兼容性视图中),任何一种行为在单独使用时效果都很好,但在组合使用时,所产生的混合行为是不可取的。

我的期望是通过拖动可调整大小的手柄来调整元素的大小不会激活可排序行为并移动该元素。不幸的是,当我拖动元素的调整大小区域时,它也会拖动元素,就好像我在移动它的排序位置一样。我希望这两种行为是排他的。这是复制行为的代码:

<!DOCTYPE html>
<html>
<head>
  <link type="text/css" href="http://jqueryui.com/latest/themes/base/ui.all.css" rel="stylesheet" />
  <script type="text/javascript" src="http://jqueryui.com/latest/jquery-1.3.2.js"></script>
  <script type="text/javascript" src="http://jqueryui.com/latest/ui/ui.core.js"></script>
  <script type="text/javascript" src="http://jqueryui.com/latest/ui/ui.resizable.js"></script>
  <script type="text/javascript" src="http://jqueryui.com/latest/ui/ui.sortable.js"></script>

  <style type="text/css">
    .item { width: 200px; height: 20px; border: 1px solid gray; float: left; }
  </style>
  <script type="text/javascript">
  $(document).ready(function(){

    $(".item").resizable({
      start:function() {
        $("#wrapper").sortable("disable");
      },
      stop:function() {
        $("#wrapper").sortable("enable");
      }
    });
    $("#wrapper").sortable({
      items:".item"
    });
  });
  </script>
</head>
<body>
  <div id="wrapper">
    <div class="item">a</div><div class="item">b</div><div class="item">c</div><div class="item">d</div>
  </div>
</body>
</html>

我尝试了几种策略来解决这个问题,包括:

  1. 上面的方法,它试图在调整大小开始时禁用可排序。不幸的是,这根本没有效果。
  2. 让可调整大小的启动函数向项目添加一个类,然后按该类进行排序过滤器(例如 $("#wrapper").sortable({items:".item:not(.resizing)"}); 和 $ ("#wrapper").sortable({items:".item", cancel:".resizing"}); )
  3. 关于哪些选择器用于可排序和可调整大小的几种变体
  4. 广泛的谷歌搜索,在我的办公桌上敲打我的头,并在微软的总体方向上喃喃自语。

任何帮助是极大的赞赏。

4

2 回答 2

2

我通过指定可排序的句柄并在 div 中包含一个跨度来解决这个问题。

演示在这里

这意味着不幸的是,整个元素无法进行排序,但您可以使用手柄的尺寸并做出妥协!

于 2009-07-09T18:54:34.927 回答
0

我正在做类似的事情,这就是我在下面的做法。指定排序的句柄似乎可以解决问题。

您可能需要修改 css 和 javascript 内容以适应您设置环境的方式。

<!doctype html>
<html lang="en">
<head>
    <title>jQuery UI Resizable - Default functionality</title>
    <link type="text/css" href="/jquery/css/smoothness/jquery-ui-1.7.2.custom.css" rel="stylesheet" />
    <script type="text/javascript" src="/jquery/js/jquery-1.3.2.min.js"></script>
    <script type="text/javascript" src="/jquery/js/jquery-ui-1.7.2.custom.min.js"></script>
    <style type="text/css">
        #draggable { border:solid 1px black; width: 75px; height: 150px; padding: 0.5em; }
        #resizable { border:solid 1px black; width: 75px; height: 150px; padding: 0.5em; }
        #resizable h3 { text-align: center; margin: 0; }
        #sortable { list-style-type: none; margin: 0; padding: 0; }
        #sortable li { margin: 0 3px 3px 3px; padding: 0.4em; padding-left: 1.5em; font-size: 1.4em; width: 100px; background-color:#CCC;border:solid 1px black;}
        </style>
        <script type="text/javascript">
        $(function(){$("#sortable").sortable({handle: 'span'});});
        $(function(){$("#item1").resizable();});
        $(function(){$("#item2").resizable();});
        $(function(){$("#item3").resizable();});
        </script>
    </head>
    <body>
    <div>
        <ul id="sortable">
            <li id="item1" class="ui-state-default"><span>Item 1</span></li>
            <li id="item2" class="ui-state-default"><span>Item 2</span></li>
            <li id="item3" class="ui-state-default"><span>Item 3</span></li>
        </ul>
    </div>
</body>
</html>
于 2009-07-16T19:06:54.887 回答