[英]Changing height after dragging and dropping
所有,
我有一个圆圈,可以从上div拖放到下div。 请看小提琴。 单击底部的圆圈后,然后尝试使用输入按钮更改高度。 输入按钮位于顶部和底部div之间,并使用5的增量值。
但是,我的事件处理程序在从5递增到10后不会更改高度值。
我的目标是允许更改高度,尤其是在我在底部和div中放下一个圆并选择了该圆以模拟激活之后。
我尝试将事件处理程序与圆和输入按钮相关联的方式有问题吗?
https://jsfiddle.net/mdevera/ff1bfpsd/
destinationContainer.addEventListener("click", change);
function change(event) {
activeShape = event.srcElement;
}
function changeHeight(event) {
//var height = (parseInt(activeShape.clientHeight, 10) + parseInt(event.target.value, 10)) + "px";
activeShape.style.height = event.target.value + "px";
}
问题在于, #destination
元素的click
事件侦听器仅在单击change
函数时才调用它。 换句话说,由于没有触发任何点击事件,因此在您拖放元素时不会触发change
函数。 结果,由于从未调用过change
函数,因此change
函数中定义的activeShape
变量不会指向元素。
另一种方法是使用:last-child
伪类选择#destination
元素的最后一个子元素。 最后一个子元素总是附加的最后一个元素,这意味着更改高度时,您始终将最近放置的元素作为目标。
function changeHeight(event) {
var activeShape = destinationContainer.querySelector(':last-child');
if (activeShape !== null) {
activeShape.style.height = event.target.value + "px";
}
}
阅读您的评论后:
除了上述更改之外,您似乎还在寻找input
事件而不是change
事件。 更改元素的值时,将同时触发input
事件,而change
事件是在blur
时触发的(即,从该字段移除焦点时)。
var destinationContainer = document.querySelector("#destination");
var input = document.querySelector('#height-input');
input.addEventListener('input', function (event) {
var activeShape = destinationContainer.querySelector(':last-child');
if (activeShape !== null) {
activeShape.style.height = event.target.value + "px";
}
});
这看起来很不正常,但是您应在进行更改后将其移出输入,或使用上/下键“赶上”输入更改。 总的来说,这需要某种onblur
。 在现代浏览器中, oninput
事件是这种情况的首选。
onchange
-仅在聚焦之后 oninput
与onchange相同,但不需要模糊焦点 onpropertychange
- 只需将HTML中的onchange
更改为oninput
解决您的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.