所有
我有一个圆圈,我从上部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";
}
答案 0 :(得分:0)
问题是,click
元素的#destination
事件侦听器仅在单击时调用change
函数。换句话说,拖放元素时不会触发change
函数,因为没有触发任何单击事件。因此,activeShape
函数中定义的change
变量不会指向元素,因为永远不会调用change
函数。
另一种方法是使用:last-child
pseudo class选择#destination
元素的最后一个子元素。最后一个子节点始终是附加的最后一个元素,这意味着在更改高度时,您始终会将最近删除的元素作为目标。
function changeHeight(event) {
var activeShape = destinationContainer.querySelector(':last-child');
if (activeShape !== null) {
activeShape.style.height = event.target.value + "px";
}
}
阅读评论后:
除了上述更改之外,您似乎还在寻找input
event而不是change
事件。更改元素的值时会同步触发input
事件,而blur
上会触发change
event(从该字段中删除焦点时)。
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";
}
});
答案 1 :(得分:0)
它看起来很不寻常,但您应该在做出更改后移出输入或使用向上/向下键向"赶上"输入变化。一般来说,它需要某种web.config
。在现代浏览器中,onblur
事件最适合这种情况。
oninput
- 仅在关注之后onchange
- 与onchange相同,但不需要模糊焦点oninput
-
只需将HTML中的onpropertychange
更改为onchange
即可解决您的问题。