сбрасываемый jQuery принимает

Поиски, Поиски, Поиски (вставляют танцующее обезьяну видео здесь)

Мой персональный "лучшая практика" должны иметь все в базе данных. Положения в компании являются определенно справочной таблицей.

то же идет для переводов, которые могут быть немного более хитрыми, но обычно определение представления, присоединяющееся к таблице с таблицей преобразования, является хорошим началом.

Кроме того, если Положение является только международным значением, и Ваше приложение является одноязыковым, можно добавить заголовки положения непосредственно к базе данных.

23
задан Marcelo Camargo 7 April 2015 в 21:05
поделиться

4 ответа

Согласно документации JQuery по Селекторам .

Все перетаскиваемые объекты, соответствующие селектору будут приняты. Если функция указано, функция будет вызываться для каждого перетаскиваемого на странице (пройдено в качестве первого аргумента функция), чтобы предоставить настраиваемый фильтр. Функция должна вернуть истину, если draggable должен быть принят.

Таким образом,

$('.selector').droppable({ accept: '.special' }); 

в их примере будет действовать так, как если бы на него что-то было сброшено, если он имеет класс 'special'. Похоже, он может принимать любой селектор JQuery .

8
ответ дан 29 November 2019 в 00:46
поделиться

Если я правильно понял ваш вопрос, вы хотите условно принять отброшенный элемент на основе пользовательского кода. Ответ Aberon - это типичный случай: вы хотите разрешить удаление только определенных перетаскиваемых параметров в зависимости от их класса, а все остальные вернутся. Если это ответ на ваш вопрос, тогда хорошо.

Однако есть случай, когда анимация возврата происходит условно на основе чего-то более сложного, чем соответствие класса. В моем собственном проекте я использую перетаскивание для добавления пользователей в группу. Если удаленный пользователь уже находится в группе, я хочу, чтобы вспомогательный элемент пользователя вернулся обратно. В противном случае я использую действие AJAX, чтобы вставить их. Это не замена внутренней проверки, но это приятная визуальная обратная связь.

Я искал в другом месте простой ответ на этот вопрос. Примечание для сопровождающих JQuery: для меня наиболее простым способом было бы добавить какое-то свойство к объекту события в функции перетаскивания, например:

$('.target').droppable({
    accept: '.valid'
    drop: function(event, ui) {
        if(isDropOK() == true) {
            // add child here
        } else {
            event.revert = true;
        }
    }
});

К сожалению, это не сработает. Но вот что «работает»: установите перетаскиваемый элемент на постоянное возвращение, а затем скройте помощник, если условие выполнено. Вы можете получить ссылку на помощник, ища единственный элемент на странице, который имеет класс ".ui-draggable-dragging". Вот пример: замените isDropOK () своей собственной логикой:

$('.valid').draggable({
    revert: true,
    helper: 'clone',
    opacity: 0.5
});

$('.target').droppable({
    accept: '.valid'
    drop: function(event, ui) {
        if(isDropOK() == true) {
            $('.ui-draggable-dragging').hide();
            // add child here
        }
    }
});

Итак, напомним, каждый элемент всегда будет возвращаться, если вы не вмешаетесь в событие drop и вручную не скроете помощника. Анимация отката все равно будет, но ваши пользователи выиграли не вижу этого. Это небольшая хитрость, но конечный результат вроде работает нормально.

13
ответ дан 29 November 2019 в 00:46
поделиться

Если вы хотите, чтобы сбрасываемый объект принимал выбранные элементы, вы можете сделать что-то вроде этого:

$(".droppable").droppable({
    accept: function(d) { 
        if(d.hasClass("foo")||(d.attr("id")=="bar")){ 
            return true;
        }
    }
});

Этот сбрасываемый объект будет принимать элементы с классом «foo» или элемент с идентификатором bar "

48
ответ дан 29 November 2019 в 00:46
поделиться

Вместо использования класса в качестве accept вы можете просто использовать такую ​​функцию, как и верните истину, если он соответствует вашим критериям.

$('#mydroppable').droppable(
{
    accept: function() { return true; },
    drop: function () { alert("Dropped!"); }
});
1
ответ дан 29 November 2019 в 00:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: