Добавление функции в jQuery draggable возвращает "событие"
Что у меня:
У меня есть draggable div с параметром revert set как "invalid".
Что мне нужно:
Когда происходит возврат, я хочу вызвать изменение CSS для другого элемента.
Проблема:
"revert" - это параметр, а не событие, поэтому я испытываю большие трудности при запуске требуемого изменения CSS при возврате.
Мой код:
$('#peg_icon').draggable({
revert: 'invalid',
scroll: false,
stack: "#peg_icon",
drag: function(event, ui) {
$('#peg_icon').css('background-image','url(images/peg-icon-when-dragged.png)');
}
});
Что я пробовал:
Я безуспешно пытался использовать "revert" в качестве события:
revert: function(event, ui) {
$('#peg_icon').css('background-image','url(images/peg-icon-default.png)');
},
Я также безуспешно пытался получить параметр revert paramater для выполнения этой функции:
function(socketObj)
{
//if false then no socket object drop occurred.
if(socketObj === false)
{
//revert the peg by returning true
$('#peg_icon').css('background-image','url(images/peg-icon-default.png)');
return true;
}
else
{
//return false so that the peg does not revert
return false;
}
}
Контекст:
Я перетаскиваю div, который при перетаскивании меняет фоновое изображение, и когда перетаскивание возвращается, фоновое изображение восстанавливается в исходное состояние.
Мой вопрос:
Как я могу вызвать изменение CSS для другого элемента, когда при перетаскивании происходит перетаскивание?
Ответы
Ответ 1
Оказывается, что revert может принять метод. См. Полный пример:
http://jsfiddle.net/mori57/Xpscw/
В частности:
$(function() {
$("#ducky").draggable({
revert: function(is_valid_drop){
console.log("is_valid_drop = " + is_valid_drop);
// when you're done, you need to remove the "dragging" class
// and yes, I'm sure this can be refactored better, but I'm
// out of time for today! :)
if(!is_valid_drop){
console.log("revert triggered");
$(".pond").addClass("green");
$(this).removeClass("inmotion");
return true;
} else {
$(".pond").removeClass("green");
$(this).removeClass("inmotion");
}
},
drag: function(){
// as you drag, add your "dragging" class, like so:
$(this).addClass("inmotion");
}
});
$("#boat").droppable({
drop: function( event, ui ) {
$(this)
.addClass("ui-state-highlight");
}
});
});
Надеюсь, это поможет... Я предполагаю, что все, что вы пытались изменить, было проблемой, а не попыткой использовать revert с вызовом функции. Взгляните еще раз на то, что CSS вы пытались установить, и посмотрите, может быть, ваша проблема там.
Ответ 2
Вы хотите сделать что-то вроде этого:
$('#peg_icon').draggable({
revert: function (socketObj) {
if (socketObj === true) {
// success
return false;
}
else {
// reverting
return true;
}
},
scroll: false,
stack: "#peg_icon",
drag: function(event, ui) {
$('#peg_icon').css('background-image','url(images/peg-icon-when-dragged.png)');
}
});
DEMO:
http://jsfiddle.net/yTMwu/35/
Надеюсь, это поможет!