代码之家  ›  专栏  ›  技术社区  ›  jwl

IE8中的Jquery UI:在调整可排序和可调整大小的元素大小时暂停排序行为

  •  3
  • jwl  · 技术社区  · 16 年前

    我有一个元素列表,我想使用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. 使用resizable的start函数为项目添加一个类,然后使用该类的可排序过滤器(例如$(“#wrapper”).sortable({items:“.item:not(.resize)”});以及$(“#wrapper”).sortable({items:“.item”,cancel:“.resize”}); )
    3. 大量的谷歌搜索,在我的桌子上打我的头,并在微软的大方向上喃喃自语。

    2 回复  |  直到 16 年前
        1
  •  2
  •   redsquare    16 年前

    here .

    这意味着不幸的是,整个元素无法进行排序,但你可以调整手柄的尺寸,找到一个折衷方案!

        2
  •  0
  •   CoolJJ CoolJJ    16 年前

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

    <!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>