#jquery #jquery-ui #jquery-ui-draggable #jquery-ui-droppable
#jquery #jquery-пользовательский интерфейс #jquery-ui-перетаскиваемый #jquery-ui-droppable
Вопрос:
У меня действительно проблемы с перетаскиванием jQuery. Итак, позвольте мне немного объяснить ситуацию.
Чего я хочу добиться, так это следующего: когда вы перетаскиваете одну из капель на временной шкале, идентификатор из div и идентификатор элемента, на который он был перенесен, должны сохраняться в моей базе данных сразу после удаления.
Мне удалось сделать это с помощью ajax, вот код:
$('#dropzone ul li').droppable({
drop: function(event, ui) {
var day = $(".confirmday").val();
var $drag = $(ui.draggable),
var $drop = $(this);
var drag = $drag.attr('id');
var drop = $drop.attr('id');
console.log(drag);
if(drag == 'drag1')
{
drag = 'Medicijnen';
werkwoord = ' ingenomen om ';
}
else if(drag == 'drag2')
{
drag = 'Snack';
werkwoord = ' gegeten om ';
}
else if(drag == 'drag3')
{
drag = 'Frisdrank';
werkwoord = ' gedronken om ';
}
else if(drag == 'drag4')
{
drag = 'Thee';
werkwoord = ' gedronken om ';
}
else if(drag == 'drag5')
{
drag = 'Koffie';
werkwoord = ' gedronken om ';
}
else if(drag == 'drag6')
{
drag = 'Alcohol';
werkwoord = ' gedronken om ';
}
$.post("ajax/save.php", {
drag: drag,
drop: drop,
userid: <?php echo $_SESSION['id']; ?>,
day: day},
function(data)
{
});
return false;
},
});
Но когда я это делаю, перетаскиваемый элемент (или клон этого элемента) просто исчезает. Я не знаю почему, потому что страница не обновляется. Новый элемент просто не будет сохранен.
Другой вариант, который я пробовал, заключался в том, чтобы поместить идентификатор перетаскиваемого элемента и идентификатор элемента dropped on в текстовое поле и сохранять это каждый раз, когда что-то отбрасывается. Но это также не сработает.
Я действительно надеюсь, что кто-нибудь сможет мне помочь! Заранее спасибо.
Комментарии:
1. Я бы использовал
switch
оператор вместо этой цепочкиelse if
s.2. Я совершенно уверен, что вы не должны возвращать false после выполнения события drop. Также, похоже, в конце и после есть запятая
$(ui.draggable)
..3. Я также отреагировал на
return false
. Поскольку это сообщит jQuery UI droppable, что удаленный элемент недействителен, а затем отбросит его. Скорее всего, именно поэтому он исчезает.
Ответ №1:
Вы возвращаетесь false
в конце drop
обработчика обратного вызова.
Это сообщит удаляемому, что перетаскиваемый элемент был недействительным, и затем отбросит его. Если вы полностью удалите return
, это должно сработать.
Я взял на себя смелость оптимизировать ваш код, надеюсь, вы не возражаете 😉
$('#dropzone ul li').droppable({
drop: function(event, ui) {
var day = $(".confirmday").val(),
drag, werkwoord;
switch (ui.draggable[0].id) {
case "drag1":
drag = 'Medicijnen';
werkwoord = ' ingenomen om ';
break;
case "drag2":
drag = 'Snack';
werkwoord = ' gegeten om ';
break;
case "drag3":
drag = 'Frisdrank';
werkwoord = ' gedronken om ';
break;
case "drag4":
drag = 'Thee';
werkwoord = ' gedronken om ';
break;
case "drag5":
drag = 'Koffie';
werkwoord = ' gedronken om ';
break;
case "drag6":
drag = 'Alcohol';
werkwoord = ' gedronken om ';
break;
default:
return false;
break;
}
$.post("ajax/save.php",
{
drag: ui.draggable[0].id,
drop: this.id,
userid: <?php echo $_SESSION['id']; ?>,
day: day
},
function(data){}
);
},
});