我希望能够将页面上的元素拖到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>
答案 0 :(得分:1)
这会附加,因为您尝试在此时调用不存在的元素上的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
函数here的其他信息。回调可以使用参数并可以使用,例如检查它是否是404。
答案 1 :(得分:0)
通过将draggable / droppable代码添加到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>
这些脚本行将从主页中删除
答案 2 :(得分:0)
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>
标记。