Evo*_*net 6 javascript jquery jquery-ui
我想知道如何将一个或多个项目(我个人的个人记录,通过他们的头像照片)拖到目标(在我的情况下是一个城市列表),然后更新数据库中的拖动项目的详细信息他们被拖到的项目.
我目前正在为单项工作.
我有一个侧边栏,其中包含我从EntityFramework数据库中检索的位置列表:
<ul>
<li class="droppable">
<span>Sydney</span>
</li>
<li class="droppable">
<span>Brisbane</span>
</li>
<li class="droppable">
<span>Melbourne</span>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
在我的主窗口中,我有一个人的图像网格,我正在使用Jquery UI可选择以启用这些图像:
<ul class="people-list" id="selectable">
@foreach (var item in Model.People)
{
<li>
<img src="@item.Photo" style="width:100%" class="img-polaroid" />
</li>
}
</ul>
$(function () {
$("#selectable").selectable({
selected: function (event, ui) {
if ($(ui.selected).hasClass('click-selected')) {
$(ui.selected).removeClass('ui-selected click-selected');
} else {
$(ui.selected).addClass('click-selected');
}
},
unselected: function (event, ui) {
$(ui.unselected).removeClass('click-selected');
}
});
});
Run Code Online (Sandbox Code Playgroud)
我想做的是,一旦用户选择了一个或多个人,他们就可以将所选人员拖动到其中一个位置,然后更新数据库.
因此,如果用户将PersonID 4,5和9拖动到'Sydney',那么我需要异步更新数据库以执行此操作.
我添加了JQuery Draggable和Droppable,我可以将单个人拖到其中一个位置,然后更新数据库,但我无法使用selectable来允许选择多个项目.
$(function () {
$(".img-polaroid").draggable({
containment: "document",
helper: 'clone',
opacity: 0.70,
zIndex: 10000,
});
$(".droppable").droppable({
hoverClass: "ui-state-hover",
tolerance: "pointer",
drop: function (event, ui) {
$.ajax({
type: "POST",
url: '/Person/UpdateLocations/' + $(this).attr("id") + '|' + $(ui.draggable).attr("id"),
success: function (data) {
$('.draggable').draggable('destroy');
$('#successMsg').empty();
$('#successMsg').append(data);
$('#successDiv').show();
$('.draggable').draggable({ revert: true });
}
});
}
});
});
Run Code Online (Sandbox Code Playgroud)
我发现 .selectable() 和 .draggable() 不适用于同一元素。我的建议是创建您自己的多选行为。
将城市和人员的 ids 作为值嵌入到相应的 HTML 元素中,eq :<li class="droppable" data-val="sydney"><span>Sydney</span> </li>
和<img src="" class="img-polaroid" data-val="4"/>
。
每个选定的元素都将由特定类标记,在 中定义selectedClass = "ui-selected"
。该类将通过单击事件进行切换。拖动事件时可能未选择某个元素,因此我们需要添加selectedClass
on draggable.start
。
.draggable
仅适用于单个拖动元素(CMIIW),因此我们通过更改元素的top
和属性来移动所选元素。元素的left
集合。position=relative
#selectable
需要在回调上完成的操作droppable.drop
:准备数据并执行 AJAX 请求。如果 AJAX 请求成功,可选择的元素将被删除并更新消息。如果 AJAX 请求失败,可选元素将放回其原始位置。
请看一下示例:http://jsfiddle.net/marson/zSCAb/131/。希望这可以帮助。
归档时间: |
|
查看次数: |
1163 次 |
最近记录: |