17 jquery jquery-ui jquery-ui-sortable jquery-ui-draggable
我正在使用JQuery库来实现拖放.
当它被放入可排序列表时,如何获取被拖动的元素?
我想得到被拖动的div的id.拖动以下元素:
<div class="control" id="control[1]" >
<img src="img/controls/textfield.png" />
</div>
Run Code Online (Sandbox Code Playgroud)
我有他们的例子中的标准拖动功能
$(".control").draggable({
connectToSortable: '#sortable',
helper: 'clone'
});
Run Code Online (Sandbox Code Playgroud)
拖动部分中的函数停止,下一个代码返回正确的值
stop: function(event, ui) {
alert(ui.helper.attr('id'));
}
Run Code Online (Sandbox Code Playgroud)
这是可排序的元素:
<ul id="sortable"><li>test</li></ul>
Run Code Online (Sandbox Code Playgroud)
和他的功能:
$("#sortable").sortable({
revert: true,
accept: '.control',
receive: function(event, ui) {
// here i need to get draggable element id
}
});
Run Code Online (Sandbox Code Playgroud)
我尝试了各种ui.id等似乎不起作用.
receive: function(event, ui) {
$(ui.draggable).attr("id")
}
Run Code Online (Sandbox Code Playgroud)
抛出undefined.
更新:
对不起,我的错:)我母亲常说 - "编码前读取API".ui.item.attr('id')工作良好.
Ste*_*ike 26
尝试
receive: function(event, ui) {
$(ui.item).attr("id")
}
Run Code Online (Sandbox Code Playgroud)
根据文档,receive(实际上所有可排序的回调)都有两个参数.第二个参数应包含:
看起来contextui.item在beforeStop事件和receive事件之间发生了变化.
在我的情况下,我试图将项目的ID设置为生成的值和
receive: function (event, ui) { ui.item.attr("id", "control" + currentControlId++);}
Run Code Online (Sandbox Code Playgroud)
不适合我
所以你可以解决这个问题:
beforeStop: function (event, ui) { itemContext = ui.item.context;},
receive: function (event, ui) { $(itemContext).attr("id", "control" + currentControlId++);}
Run Code Online (Sandbox Code Playgroud)