replaceWith и jQuery перетаскиваемое падение? - PullRequest
1 голос
/ 11 июля 2009

Я пытаюсь понять, почему

$('#title').replaceWith('ha'); 

будет работать за пределами

drop: function(event, ui) {}

область в скрипте jquery, но она не будет работать внутри. В частности, если я делаю

$(".droppable").droppable({
drop: function(event, ui) {
    $('#title').replaceWith('ha'); 
     }

Я получаю Runtime Error (line 1102) data(...).options is null or not an object. Также, если я вставлю $('#title').append('ha'); внутри drop:, это работает. Однако, если я поставлю $('#title').replaceWith('ha'); где-нибудь еще за пределами

$(".droppable").droppable({ /* */  });

это работает?

Ответы [ 2 ]

7 голосов
/ 01 марта 2011

Я публикую это как ответ, но на самом деле это скорее комментарий к ответу Джона Эриксона (у меня пока нет комментариев к репутации). Спустя 18 месяцев это все еще ошибка в IE, и я просто хотел подробнее рассказать о том, «как запустить что-то вне функции отбрасывания», предложив setTimeout ()

Я решаю проблему, передав анонимную функцию, которая удаляет элемент в setTimeout (). В зависимости от настроек привязки или возврата вы можете также рассмотреть возможность скрытия перетаскиваемого объекта.

$(".droppable").droppable({
    drop: function(event, ui) {
        // do something interesting here...

        // now get rid of the draggable
        $(ui.draggable).hide();           
        setTimeout(function(){$(ui.draggable).remove();}, 1);
    }
});
3 голосов
/ 11 июля 2009

Имеет ли элемент с id = 'title' также class = 'droppable'

Я мог видеть, пытается ли он удалить элемент, который вызвал бы событие сброса, возможно, больше нет элемента, с которым можно работать, и вы можете получить ошибку «не объект». Я не знаю наверняка, не попробовав это сам.

Возможно, вы можете пометить объект каким-нибудь фиктивным классом (данные jQuery были бы более подходящими и соответствовать SRP, но это выходит за рамки этого ответа), а затем выйти за пределы функции отбрасывания может сделать замену

что-то вроде ...

$(".droppable").droppable({
    drop: function(event, ui) {
        // mark the element for replacement
        $('#title').addClass('replaceThisElement'); 
    }
});

// outside of the drop function
$('#title .removeThisElement').replaceWith('ha');
...