Пустой HTML-код отбрасываемого / сортируемого элемента при перетаскиваемом событии остановки - PullRequest
0 голосов
/ 16 февраля 2019

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

Я пытался использовать jQuery empty () в событии перетаскиваемой остановки

let initDrag = () => {
    $( ".draggable" ).draggable({
        connectToSortable: ".droppable",
        helper: "clone",
        revert: "invalid",
        stop: afterDrop
    })
}
let initSortable = () => {
    $( ".droppable" ).sortable({
        revert: true
    });
}

let afterDrop = (event, ui) => {
    let fieldID = $(event.target).attr("data-id")
    $(formTag).html(""); //This is where the problem is
    getFieldData(fieldID).then(fieldData => {
        fieldData[0].field.field_id = Date.now();
        formBuildingJSON.form_fields.push(fieldData[0]);
        appendFieldsMarkup()
    })
    $(ui.helper[0]).remove()
}

Я ожидаю, что вторая строка в afterDrop () очистит тег формы.но это дает мне ошибку.

`

jquery-ui.js: 16692 Uncaught TypeError: Невозможно прочитать свойство 'removeChild' с нулевым значением в $. (/ Form-builder / anonymous function). (Анонимная функция) ._ clear (http://localhost/form-builder/external-scripts/jquery-ui/jquery-ui.js:16692:36) в $. (/ построитель форм / анонимная функция). (анонимная функция) ._ clear (http://localhost/form-builder/external-scripts/jquery-ui/jquery-ui.js:144:25) в HTMLLIElement. (jquery-ui.js: 15688) в HTMLLIElement.r.complete (jquery.min.js: 2) в u (jquery.min.js: 2) в Object.fireWith [as resolWith] (jquery.min.js: 2) в u (jquery.min.js:2) at Function.w.fx.tick (jquery.min.js: 2) at at (jquery.min.js: 2) `

Здесь jsfiddle изпохожая проблема

1 Ответ

0 голосов
/ 16 февраля 2019

Для этого вам нужно внести изменения в ваш файл jquery-ui.js.Ниже приведена строка с текстом:

this.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );

, который необходимо заменить следующим кодом:

if (this.placeholder[ 0 ].length) {
    if (this.placeholder[ 0 ].parentNode.length) {
         this.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );                        
    }
}

Надеюсь, этот код поможет вам.

...