2011-08-05 6 views
1

bind()の代わりにlive()を使用して、AJAXでコンテンツをリロードした後でもイベントハンドラが存在することを確認しましたが、他に追加されたJQuery .sortable()?ソートや追加後にリロードする必要があるULがあります。しかし、AJAXをリロードした後は、ソートが正しく機能しません。AJAXでロードされたコンテンツにJQueryを追加する

ソート可能性は完全に失われませんが、ドラッグははるかに難しくなります。それは周りにジャンプし、一見私はドラッグしようとしているものではない2つの他のセクションを切り替えます。これは部分リロード後にのみ発生します。私の推測では、リロードするときに、ソート可能なものを再接続する必要があります...どうすればこのことができますか?ここに私のコードは次のとおりです。それは要素がDOMに追加されるたびに実行されるように

$("#sections").sortable({ 
       start: function (event, ui) { 
        startIndex = ui.item.index(); 
       }, 
       update: function (event, ui) { 
        $.ajax({ 
         type: "POST", 
         url: "/Form/sortSections", 
         data: { 
          formID: '@(Model.formID)', 
          displayOrder: ui.item.index() + 1, 
          sectionID: $(ui.item).attr("id"), 
          startDisplayOrder: startIndex + 1 
         }, 
         success: function (result) { 
          $.get("/Form/_AllSections/@(Model.formID)", function (data) { 
           $("#sections").html(data); 
          }); 
         }, 
         error: function (req, status, error) { 
          alert(error); 
         } 
        }); 
       } 
      }); 

答えて

3

live()loadイベントを使用してください。

http://api.jquery.com/load-event

+0

あなたのソリューションを実装し始めている間、私は私のAJAXのGETがリストアイテムだけではなく、全体のULを返していました...実際の問題を発見しました。ですから、私はそのULを#sections ULに追加していました...これは無効なHTMLを複数の方法で作ります。無効なHTMLは#draggableで止められていなければなりません。アドバイスをいただきありがとうございます。私は '.live( 'load'、function())'を将来使用する必要があると確信しています。 – GendoIkari