jquery - Vue js 在列表中添加动态字段,删除和排序不起作用

标签 jquery jquery-ui-sortable vue.js

我正在使用 Vue js 1.0.25

我想使用动态文本框 创建一个列表。基本思想是点击添加答案按钮,它应该创建一个动态文本框及其索引编号,如Ans 1 并带有一个删除 按钮。

用户最多可以添加 5 个答案。并且用户还可以使用答案标签作为处理程序重新排序答案。我使用 jQuery Sortable 作为 Vue 指令 对答案进行排序。

看起来工作正常,我在这里为它创建了一个 JSFiddle:https://jsfiddle.net/devendragohil/6stotpaq/23/

But the problem starts when removing an answer after reordering it. Suppose, add any five answers and then reorder them randomly and after that try to remove them one by one, it will behave strange.

我该如何解决?

最佳答案

我不知道您的问题出在哪里,但我认为它与 jQuery Sortable 有关 我使用 vue-sortable 复制了您的示例它工作得很好。

Docs 很简单,简而言之,您只需将 v-sortable 添加到您的列表容器中,其他任何东西都应该像您拥有的那样工作。

编辑

正如@g.annunziata 在他的评论中提到的那样,如果先订购然后添加新商品,前面的示例将不起作用。

为了解决我们也需要更新数据数组的问题,在指令 v-sortable="{onUpdate: onUpdate }" 上添加这个选项,并在 vm 上添加该方法

onUpdate: function (event) {
   var movingElement = this.answers.splice(event.oldIndex, 1)[0];
   this.answers.splice(event.newIndex, 0, movingElement);
}

当我试图解决这个问题时,我遇到了另一个问题,如果我将一个元素移动到最后一个位置,然后添加一个新项目,我会得到这个难看的错误

Cannot read property 'parentNode' of null

我没有深入研究这个问题的真正原因,但作为解决方法,只需在元素列表后添加一个不可见的 div,就像这样。

<div class="list-group" v-sortable="{ handle:'.handle', onUpdate: onUpdate }">
  <div class="list-group-item" v-for="answer in answers">
    ...
  </div>
  <div style="display:none"></div>
</div>

示例已修复,请查看 http://jsbin.com/qinofow/edit?html,js,output

关于jquery - Vue js 在列表中添加动态字段,删除和排序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41584958/

相关文章:

javascript - 单击“选择选项”时,使下拉菜单消失

jquery-ui 可排序 : how to change the DOM of the dragging element

javascript - JQuery 可排序元素不可排序且定位到指针

javascript - 我的关于 Axios 和功能的 Vue.js 代码不起作用

javascript - 如何从回调函数内部处理 Vue.js 组件中的方法?

javascript - 不等待函数的异步方法 - VUE

jquery - $q.all 在返回之前解析

javascript - Jquery ajax promise 返回未定义

javascript - 将自定义数据添加到 Google Traffic api

javascript - Jquery ui 可排序不起作用