3

Jquery UI を使用して、並べ替えとサイズ変更を可能にしたい要素のリストがあります。それらを組み合わせると、Chrome と Firefox でうまく機能します。しかし、IE8 では (通常ビューと互換ビューの両方で)、どちらの動作も個別に使用するとうまく機能しますが、組み合わせて使用​​すると、結果として生じる混合動作は望ましくありません。

私の期待は、サイズ変更可能なハンドルをドラッグして要素のサイズを変更しても、並べ替え可能な動作がアクティブ化されず、その要素が移動されないことです。残念ながら、要素のサイズ変更領域をドラッグすると、並べ替え位置を移動しているかのように要素もドラッグされます。2つの動作を排他的にしたい. 動作を再現するコードは次のとおりです。

<!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. サイズ変更可能な start 関数でアイテムにクラスを追加し、そのクラスで並べ替え可能なフィルターを設定します (例: $("#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 に答える