为什么可排序事件目标为空
Why is sortable event target null
使用 RubaXa Sortable,我正在做一个非常标准的(假设它是图书馆网站上的一个例子)将一个项目从一个组拖到另一个组。我需要将原始组 ID 和目标组 ID 存储为变量。除了目标始终为 NULL 外,一切正常。图书馆网站上的示例本身不涉及寻址 evt.target
,所以我对此一无所知。
我这里的例子:
https://jsfiddle.net/0brfa3w5/
HTML:
<div id="catscontainer">
<div id="parentone" class="parentcatcontainer">
<h4 class="parentcathead">Parent Catagory 1</h4>
<ul class="subcatlist" id="ul_parentcatone">
<li id="parentone_subone">Sub One</li>
<li id="parentone_subtwo">Sub Two</li>
<li id="parentone_subthree">Sub Three</li>
</ul>
</div>
<div id="parenttwo" class="parentcatcontainer">
<h4 class="parentcathead">Parent Category 2</h4>
<ul class="subcatlist" id="ul_parentcattwo">
<li id="parenttwo_subfour" style="">Sub Four</li>
</ul>
</div>
</div>
JS:
var sortyMainCats = Sortable.create(catscontainer, {
animation: 250,
ghostClass: "sortable-ghost",
handle: "h4",
draggable: "div",
dataIdAttr: 'id',
onUpdate: function (/**Event*/evt) {
var orderListMain = sortyMainCats.toArray();
var jsonOrderList = JSON.stringify(orderListMain);
}
});
[].forEach.call(document.getElementById('catscontainer').getElementsByClassName('subcatlist'), function (el){
var sortySubCats = Sortable.create(el, {
group: 'titles',
animation: 150,
dataIdAttr: 'id',
onUpdate: function (/**Event*/evt) {
var orderListSub = sortySubCats.toArray();
console.log('Dragged. Subs order is: ' + orderListSub);
},
// Element is dropped into the list from another list
onAdd: function (/**Event*/evt) {
var itemEl = evt.item; // dragged HTMLElement
var fromList = evt.from.id; // previous list
var toList = evt.target;
// + indexes from onEnd
console.log(evt);
console.log('Moved to new list. Old list was: ' + fromList + '. New list is: ' + toList);
}
});
});
更新
我懒洋洋地没有检查 JsFiddle 中的控制台,因为我从我自己的版本中复制并粘贴了它,它产生了 NULL。奇怪的是,它在那里为我产生了结果。
在我的原始版本中,evt
的控制台数组显示了一个带有值的目标,但在直接引用时为 NULL (evt.target
)。
除了遇到 dataIdAttr: 'id'
选项在 jsFiddle 版本中好像不存在的异常情况外,进一步的调查没有太大帮助,而它在我的原件上可以正常工作。如果您不熟悉此版本的 Sortable,该选项指定拖动项目的 id
应用作标识符。在 jsFiddle 的控制台中看到的(看似)随机结果与省略此选项时的结果相同。控制台打印输出在我的原始版本中正确显示了每个项目 ID。
到达某个地方。看来这可能是由于版本差异,我认为是一些错误?我的原始版本使用的是图书馆网站上最可用的版本。由于 jsFiddle 示例需要在线外部资源,因此我将 URL 提供给 github 示例使用的 js 文件。我尝试在我的原始站点上使用后者并得到与 jsFiddle.
相同的结果
所以现在evt.target
returns一个结果但是引入了两个新问题。它不再在结果中使用项目 id
,而且它似乎也指定了错误的目标,将自身(项目)列为目标。最初的问题是 evt 对象在控制台数组中显示了正确的目标,但无法使用 evt.target 直接解决,因为这会产生 NULL。
令我同样沮丧和欣慰的是,这是一个错误。我 运行 通过版本 v1.1.1 和 v1.2.0 进行了多项同时测试,得出结论认为某些行为未按预期方式运行并提交了错误报告。
库的作者回复了更新的 v1.2.1,解决了我遇到的问题。
使用 RubaXa Sortable,我正在做一个非常标准的(假设它是图书馆网站上的一个例子)将一个项目从一个组拖到另一个组。我需要将原始组 ID 和目标组 ID 存储为变量。除了目标始终为 NULL 外,一切正常。图书馆网站上的示例本身不涉及寻址 evt.target
,所以我对此一无所知。
我这里的例子:
https://jsfiddle.net/0brfa3w5/
HTML:
<div id="catscontainer">
<div id="parentone" class="parentcatcontainer">
<h4 class="parentcathead">Parent Catagory 1</h4>
<ul class="subcatlist" id="ul_parentcatone">
<li id="parentone_subone">Sub One</li>
<li id="parentone_subtwo">Sub Two</li>
<li id="parentone_subthree">Sub Three</li>
</ul>
</div>
<div id="parenttwo" class="parentcatcontainer">
<h4 class="parentcathead">Parent Category 2</h4>
<ul class="subcatlist" id="ul_parentcattwo">
<li id="parenttwo_subfour" style="">Sub Four</li>
</ul>
</div>
</div>
JS:
var sortyMainCats = Sortable.create(catscontainer, {
animation: 250,
ghostClass: "sortable-ghost",
handle: "h4",
draggable: "div",
dataIdAttr: 'id',
onUpdate: function (/**Event*/evt) {
var orderListMain = sortyMainCats.toArray();
var jsonOrderList = JSON.stringify(orderListMain);
}
});
[].forEach.call(document.getElementById('catscontainer').getElementsByClassName('subcatlist'), function (el){
var sortySubCats = Sortable.create(el, {
group: 'titles',
animation: 150,
dataIdAttr: 'id',
onUpdate: function (/**Event*/evt) {
var orderListSub = sortySubCats.toArray();
console.log('Dragged. Subs order is: ' + orderListSub);
},
// Element is dropped into the list from another list
onAdd: function (/**Event*/evt) {
var itemEl = evt.item; // dragged HTMLElement
var fromList = evt.from.id; // previous list
var toList = evt.target;
// + indexes from onEnd
console.log(evt);
console.log('Moved to new list. Old list was: ' + fromList + '. New list is: ' + toList);
}
});
});
更新
我懒洋洋地没有检查 JsFiddle 中的控制台,因为我从我自己的版本中复制并粘贴了它,它产生了 NULL。奇怪的是,它在那里为我产生了结果。
在我的原始版本中,evt
的控制台数组显示了一个带有值的目标,但在直接引用时为 NULL (evt.target
)。
除了遇到 dataIdAttr: 'id'
选项在 jsFiddle 版本中好像不存在的异常情况外,进一步的调查没有太大帮助,而它在我的原件上可以正常工作。如果您不熟悉此版本的 Sortable,该选项指定拖动项目的 id
应用作标识符。在 jsFiddle 的控制台中看到的(看似)随机结果与省略此选项时的结果相同。控制台打印输出在我的原始版本中正确显示了每个项目 ID。
到达某个地方。看来这可能是由于版本差异,我认为是一些错误?我的原始版本使用的是图书馆网站上最可用的版本。由于 jsFiddle 示例需要在线外部资源,因此我将 URL 提供给 github 示例使用的 js 文件。我尝试在我的原始站点上使用后者并得到与 jsFiddle.
相同的结果所以现在evt.target
returns一个结果但是引入了两个新问题。它不再在结果中使用项目 id
,而且它似乎也指定了错误的目标,将自身(项目)列为目标。最初的问题是 evt 对象在控制台数组中显示了正确的目标,但无法使用 evt.target 直接解决,因为这会产生 NULL。
令我同样沮丧和欣慰的是,这是一个错误。我 运行 通过版本 v1.1.1 和 v1.2.0 进行了多项同时测试,得出结论认为某些行为未按预期方式运行并提交了错误报告。
库的作者回复了更新的 v1.2.1,解决了我遇到的问题。