2016-01-24 53 views
0

我已經集成了jQuery「排序」功能到我的網站,並將其與一個小的例外完美的作品。它只在我點擊頁面上的任何地方後才起作用。查找可排序元素的頁面部分在ajax查詢之後加載,所以我使用「on」函數。我很想弄清楚如何讓這個工作不需要先點擊。jQuery的可排序的唯一火災第二次點擊

$(document).on("mousedown.sortable", "#container", function() { 
 
    $("#container").sortable({ 
 
    update: function(event, ui) { 
 
     var data = $(this).sortable("serialize"); 
 
     $.ajax({ 
 
     data: data, 
 
     type: 'POST', 
 
     url: 'myurl' 
 
     }); 
 
    } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"> 
 
</script> 
 
<div id="mainContainer"> 
 
    <ul id="container"> 
 
    <li id="item-1">Item 1</li> 
 
    <li id="item-2">Item 2</li> 
 
    </ul> 
 
</div>

對於後來人讀這一點,關鍵要接受的答案是擁有jQuery代碼部分加載的每個HTML的部分是通過AJAX加載到文檔的時間,而不是在第一次加載頁面本身時加載的「主」代碼片段中。

回答

1

你不需要鼠標按下事件處理程序(此處被拆除),因爲這是造成排序,只添加後,你做你的初始點擊(如自己所描述的)

$("#container").sortable({ 
 
    update: function(event, ui) { 
 
    var data = $(this).sortable("serialize"); 
 
    $.ajax({ 
 
     data: data, 
 
     type: 'POST', 
 
     url: 'myurl' 
 
    }); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"> 
 
</script> 
 
<div> 
 
    <ul id="container"> 
 
    <li id="item-1">Item 1</li> 
 
    <li id="item-2">Item 2</li> 
 
    </ul> 
 
</div>

+0

李,感謝,但由於HTML是通過一個單獨的AJAX調用的頁面加載完成後加載,這些元素不存在以前與該代碼將無法正常工作。 – redstang423

+0

好的,很簡單。只需在添加新元素後調用'sortable'代碼即可。 –

+0

我沒有關注 - 你是否建議我在AJAX加載的php中調用這個jQuery代碼?包含可排序列表的div的內容可能會被替換並重新加載數次。多次加載jquery腳本會產生衝突嗎? – redstang423