我希望每次将项目拖入可拖动区域时计数,并在每次发生时增加输入字段内的计数器。
以下是我现在的情况:
function cancel(e) {
if (e.preventDefault) {
e.preventDefault();
}
return false;
}
var dragItems = document.querySelectorAll('[draggable=true]');
for (var i = 0; i < dragItems.length; i++) {
addEvent(dragItems[i], 'dragstart', function (event) {
// store the ID of the element, and collect it on the drop later on
event.dataTransfer.setData('Text', this.alt);
});
}
var drop = document.querySelector('.drop-items');
var droplist = document.querySelector('.items-listed-rc');
// Tells the browser that we *can* drop on this target
addEvent(drop, 'dragover', cancel);
addEvent(drop, 'dragenter', cancel);
addEvent(drop, 'drop', function (e) {
if (e.preventDefault) e.preventDefault(); // stops the browser from redirecting off to the text.
this.innerHTML += '<p>' + e.dataTransfer.getData('Text') + '<input type="text" class="counter-items"></p>';
return false;
return false;
});
这是小提琴:
答案 0 :(得分:0)
addEvent(drop, 'drop', function (e) {
if (e.preventDefault) e.preventDefault(); // stops the browser from redirecting off to the text.
var thatText = e.dataTransfer.getData('Text');
if (!this.innerHTML.match(thatText)) {
var p = document.createElement('p');
var text = document.createTextNode(thatText);
var input = document.createElement('input');
input.className = "counter-items";
input.value = "1";
input.type = 'text';
p.appendChild(text);
p.appendChild(input);
this.appendChild(p);
} else {
var childs = this.children;
console.log(childs);
function addValue(childs) {
var thisValue = childs[i].children[0].value;
childs[i].children[0].value = parseInt(thisValue, 10) + 1;
}
for (var i = 0; i < childs.length; i++) {
if (thatText == "Scissors" && childs[i].innerText == "Scissors") {
addValue(childs);
} else if (thatText == "Hand" && childs[i].innerText == "Hand") {
addValue(childs);
}
}
}
});
我不得不说你离解决方案还很远。
其中一个主要问题是this.innerHTML += ....
的使用,因为它在加载后不会更新文档,你必须用javascript创建实际的元素。
其余的是一种开关。如果要添加更多项目,可以添加elseIfs或使用开关。 You can check out the updated fiddle here