2011-08-05 168 views
1

我刚刚得知,您可以使用live(),而不是bind()以确保事件处理程序仍然存在内容与AJAX重载后...但我能做些什么与其他添加JQuery的,如.sortable()?我有一个UL,我需要重新加载后排序或添加;但在AJAX重新加载后,排序并不完全正确...添加了jQuery内容加载AJAX

它不会完全失去排序能力,但拖动变得更加困难;它会跳转,看似切换其他部分,这不是我想拖动的部分。这只发生在部分重新加载之后;我的猜测是,当它重新加载时,我需要重新附加排序...我怎么能做到这一点?这里是我的代码:

$("#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()所以它运行的每一个元素被添加到DOM时使用load事件。

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

+0

虽然开始实施你的解决方案,我发现实际问题......我的AJAX GET返航整个UL,不仅列表项。因此,我将UL添加到#sections UL中,这使得HTML以多种方式无效。无效的HTML必须用#draggable拧紧。感谢您的建议;我相信我将来需要使用'.live('load',function())''。 – GendoIkari