- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在此程序中,我可以使用按钮添加输入,但我需要显示每个输入变化时的长度。我可以使用 EventListener 获取长度,但我不确定如何更改任何新创建的按钮的文本值。
在第 12 行,您可以看到我能够在第一个输入上成功更改值,但我使用的是 html 变量。如果您查看我的 addCell() 函数,您会发现我有一个元素作为每个节点的子元素来跟踪每个输入的长度。我需要在 Change() 函数中访问该元素,以便可以将 event.target.value.length 设置为相应的节点子元素。
我尝试过使用它,设置 var x = this 并且我尝试使用 event.target 属性来查找相应的节点甚至innerHTML。
var i = 0;
var count = 1;
var length = 2;
var chars = 0;
document.addEventListener('input', function (evt) {
change(evt);
});
function change(elem) {
var check = document.getElementById("first");
if (event.target == check) {
document.getElementById("len").innerHTML = event.target.value.length;
return;
}
// Here's where I'm stuck
}
function removeCell() {
if (count <= 1) {
alert("Illegal operation, the police have been notified.")
return;
}
var elem = document.getElementById('main');
elem.removeChild(elem.lastChild);
count = count - 1;
length = length - 1;
}
function addCell() {
var node = document.createElement('div');
node.innerHTML += length;
var inp = document.createElement('INPUT');
var size = document.createElement('size');
inp.setAttribute("type", "text");
node.appendChild(inp);
node.appendChild(size);
document.getElementById('main').appendChild(node);
count += 1;
length += 1;
i += 1;
}
#area {
width: 585px;
background-color: lightgrey;
color: black;
border-style: solid;
margin-left: auto;
margin-right: auto;
min-height: 100px;
height: auto
}
#texts {
width: 220px;
height: 50px;
border-style: solid;
}
body {
background-color: grey;
}
<div id="area">
<form id="main">
<pre><b> input </b> length</pre>
<span id="list">
1<input type="text" id="first"> <var id="len"></var>
</span>
</form>
<br />
<button onclick="addCell()">Add Cell</button>
<button onclick="removeCell()">Remove Cell</button>
<button onclick="sort()">Sort</button>
</div>
由于我能够使用alert()在每次更改时显示每个新创建的输入的正确长度,因此我知道有一种方法可以访问我创建的“size”元素以使用event.target更新它.value.length
最佳答案
您的问题是您使用“全局”输入事件监听器,并且您的 change()
函数未编程为处理多个输入字段,因为您在其中首先查询已知元素 id
和len
。
如果您想使用全局监听器,则必须告诉您的 change()
函数如何访问新输入和相应的目标字段。
一种更简单的方法是修改 addCell()
函数并将事件监听器附加到您正在创建的输入字段,而不是使用全局监听器。因此,每个输入字段都拥有自己的事件监听器。由于输入字段和显示输入值长度的 size 元素都是在同一范围内创建的,因此您可以轻松地将长度写入相应的 size 元素。
inp.addEventListener('input', function(){
size.innerText = inp.value.length;
});
如果您希望它与您提供的 HTML 一起使用,您需要删除第一个输入字段并手动调用 addCell()
以便呈现您的初始输入。
您的代码应如下所示(注意:我设置了 var count = 0;
和 var length = 1;
):
var i = 0;
var count = 0;
var length = 1;
var chars = 0;
function removeCell() {
if (count <= 1) {
alert("Illegal operation, the police have been notified.")
return;
}
var elem = document.getElementById('main');
elem.removeChild(elem.lastChild);
count = count - 1;
length = length - 1;
}
function addCell() {
var node = document.createElement('div');
node.innerHTML += length;
var inp = document.createElement('INPUT');
var size = document.createElement('size');
inp.setAttribute("type", "text");
inp.addEventListener('input', function(){
size.innerText = inp.value.length;
});
node.appendChild(inp);
node.appendChild(size);
document.getElementById('main').appendChild(node);
count += 1;
length += 1;
i += 1;
}
addCell();
#area {
width: 585px;
background-color: lightgrey;
color: black;
border-style: solid;
margin-left: auto;
margin-right: auto;
min-height: 100px;
height: auto
}
#texts {
width: 220px;
height: 50px;
border-style: solid;
}
body {
background-color: grey;
}
<div id="area">
<form id="main">
<pre><b> input </b> length</pre>
<span id="list"></span>
</form>
<br />
<button onclick="addCell()">Add Cell</button>
<button onclick="removeCell()">Remove Cell</button>
<button onclick="sort()">Sort</button>
</div>
关于javascript - 如何使用 EventListener 更改元素的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56694682/
我想要完成的是一段代码,当单击其中一个按钮时,该按钮将获得下面列出的样式,而所有其他按钮样式将返回 null。 我假设它涉及一个 bool 语句,但也许我错了。 您将在下面看到我试图使用我的“else
我在我的 javascript 文件中的 for 循环中创建了一堆 div。它们具有相同的类名但不同的 ID。 我通过 for 循环添加了一个事件监听器,但我之前的分配被覆盖了,现在所有的 div 都
我为一些 创建了一个 EventListener元素,现在我想更改此特定元素的子元素的不透明度,以更改此特定元素上的 EventListener 是否为真。我如何用 jQuery 或 Javascr
我正在尝试删除一个 eventListener,但看起来我错过了什么。 为什么下面的代码不起作用,它没有从按钮中删除事件监听器。 我也试过绑定(bind)这个来传递作用域,但是也没用 class Te
我想在一个类中处理多个事件,这是我的示例: @Lazy(false) @Component public class EventListenerImpl { @EventListener
在我的应用程序中,我有“用户”。一个用户可以有多个“账户” 我的“帐户”实体上有一个监听器。它在“service.yml”文件中声明如下: account_listener: class: A
我想在我的项目中使用 CQRS 模式的元素。我想知道我是否用命令和事件做对了。 我不确定的是事件是否可以调用命令。为了更好地展示我想要做什么,我将使用图表和示例。 这是一个例子: 用户调用 TripC
所以当我点击“hartje”部分时,我正在触发一个功能。该函数正在获取名称为“food-option”的所有类。如果我点击函数触发器,它应该给“数据最喜欢的”一个值。它确实给了它一个值,但问题是我必须
我试图理解这段代码,但它没有任何意义。当点击#open_help按钮时,他正在调用handleOpen(),它调用showHelp(),它调用jQuery函数来显示帮助div,但如果您在下面看到他正在
使用 JavaScript 创建表格时,我正在尝试在循环中设置事件监听器。每次迭代中的事件监听器应调用相同的函数,但以当前索引作为参数。我在这里发现我可以将闭包与函数数组一起使用,但我必须使用数组吗?
这个问题已经有答案了: Javascript infamous Loop issue? [duplicate] (5 个回答) 已关闭 7 年前。 http://jsfiddle.net/1wqdmo
我调用一个函数,其中包含“if/else”语句,该函数根据作为参数传递的 bool 值添加或删除监听器。 我的问题是我无法通过调用相同的函数来删除先前添加的监听器 我缺少什么? function li
我正在尝试学习 HTML5 Canvas 。在出现吃 cookies 的猫 gif 之前,第一张图片需要点击七次。最初,我将 click EventListener 绑定(bind)到图像。出现吃 c
我很喜欢普通的 JS 井字游戏每个单元格都是一个按钮。为了处理点击,我将 eventListener 添加到包装 div: board.addEventListener("click", handle
我正在寻找一种简洁明了的方法来向我的每个复选框添加事件监听器,而不必重复我的 Javascript 代码,当涉及到 JS 时,我仍然不知所措,所以任何帮助都会非常有用赞赏。 这是我目前所拥有的
大家好。有人知道我们使用 addEventListener 方法时事件存储在哪里吗???示例: window.addEventListener('mousedown', this.myvar.onCl
有没有一种方法可以将事件监听器添加到输入,其中焦点从 onfocus 变为 off focus 基本上我使用 key up 为我的输入框分配了一个事件监听器,然后调用我的服务器来检查用户名是否已经在数
我正在 try catch 表单的 invalid 事件,但它似乎没有发生? https://codepen.io/MartinMuzatko/pen/VzWwxG?editors=1010 对于我的
我试图在单击 Canvas 元素时删除 eventListener: document.getElementById("canvas") .addEventListener("clic
我使用这行代码向通过 forloop 创建的 div 添加事件监听器: for(var i in mail){ //create div parent.addEventListener("
我是一名优秀的程序员,十分优秀!