[英]Jquery Drag and Drop on Ajax loaded Div
我希望能夠將頁面上的元素拖動到ajax加載的div內的droppable元素中。 當我將droppable元素放置在常規頁面中時,而在ajax加載的div中具有相同元素時,我可以使代碼工作。 我非常確定這是因為我調用腳本的方式以及它們在dom上的加載方式,但是我找不到解決方案。 注意:我已經嘗試在調用jquery ui之前調用加載ajax內容的代碼,但這也不起作用。 這就是我的所有調用方式,為簡潔起見,我刪除了多余的代碼。
主頁
<head>
<scripts -- jquery, jquery ui>
<script>
$(document).ready(function(){
$( "#site-preview" ).load( "/site/preview" );
});
</script>
</head>
<body>
<div class="draggable><img src=//etc/> </div>
//if I put this div here, I can drop to it, so i know the drop code works.
// <div class="droppable col-md-2" style="height:100px;border:1px solid gray"><p> </p></div>
<div id="site-preview"></div>
<script>
$(function() {
$( ".draggable" ).draggable({
helper:'clone',
appendTo: 'body',
scroll: false
});
$( ".droppable" ).droppable({
drop: function( event, ui ) {
$( this ).addClass( "ui-state-highlight" ).find( "p" ).html( "Dropped!" );
}
});
});
</script>
</body>
Ajax加載的代碼
<div class="droppable col-md-2" style="height:100px;border:1px solid gray">
<p> </p>
</div>
之所以追加,是因為您當時試圖在不存在的元素上調用droppable
。 為了解決這個問題,您可以使用可以附加到load
函數的回調函數,然后再運行其余函數。
$(document).ready(function(){
$("#site-preview").load("/site/preview", function() {
// Page loaded and injected
// We launch the rest of the code
$( ".draggable" ).draggable({
helper:'clone',
appendTo: 'body',
scroll: false
});
$( ".droppable" ).droppable({
drop: function( event, ui ) {
$( this ).addClass( "ui-state-highlight" ).find( "p" ).html( "Dropped!" );
}
});
});
});
您可以在此處找到有關load
功能的其他信息。 回調可以接受參數,並且可以用於例如檢查其是否為404。
好吧,我可以通過將可拖動/可拖放代碼添加到ajax加載的div本身來使其工作。 所以上面的內容會像這樣修改
Ajax加載的代碼
<div class="droppable col-md-2" style="height:100px;border:1px solid gray">
<p> </p>
</div>
<script>
$(function() {
$( ".draggable" ).draggable({
helper:'clone',
appendTo: 'body',
scroll: false //stops scrolling container when moved outside boundaries
});
$( ".droppable" ).droppable({
drop: function( event, ui ) {
$( this ).addClass( "ui-state-highlight" ).find( "p" ).html( "Dropped!" );
}
});
});
</script>
這些腳本行將從主頁中刪除
Ajax是異步的 。 因此,如果您先調用一些ajax,然后再調用其他命令,則ajax通常將在此之后完成。
這是回調有用的地方。 嘗試將回調添加到ajax load
調用中,如下所示: http : //api.jquery.com/load/
就像是:
$( "#site-preview" ).load( "/site/preview", function(){
$( ".droppable" ).droppable({
drop: function( event, ui ) {
$( this ).addClass( "ui-state-highlight" ).find( "p" ).html( "Dropped!" );
}
});
});
旁注:您可能應該開始使用腳本而不是<script>
標簽。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.