做简历过程中,需要用js控制进度条
1.首先我是用类名引入的是,Html代码和js代码:
然后去点击进度条是不会弹出prompt提示输入修改值的
2.然后我用id引入
然后在进度条框可以弹出输入修改的文本框
想知道怎么解决这个问题
做简历过程中,需要用js控制进度条
1.首先我是用类名引入的是,Html代码和js代码:
然后去点击进度条是不会弹出prompt提示输入修改值的
2.然后我用id引入
然后在进度条框可以弹出输入修改的文本框
想知道怎么解决这个问题
从你的问题描述来看,你似乎遇到了在JavaScript中通过类名(ClassName)和ID来选择和操作HTML元素,以及添加事件监听器的问题。
首先,让我们来看看你的代码。
var progressBar = document.getElementsByClassName("progress");
通过类名选择元素时,getElementsByClassName
方法返回的是一个HTMLCollection,也就是一个类数组的对象。即使页面上只有一个具有该类名的元素,这个方法也会返回一个包含这个元素的HTMLCollection。
如果你确定页面上只有一个具有该类名的元素,你可以通过索引来访问这个元素,例如:
var progressBar = document.getElementsByClassName("progress")[0];
然后你可以给这个元素添加一个事件监听器,例如:
progressBar.addEventListener("click", function() {
prompt("请输入新的进度值:", "");
});
var progressBar = document.getElementById("progress");
通过ID选择元素时,getElementById
方法返回的是一个单一的元素。这样你就可以直接给这个元素添加事件监听器了。例如:
progressBar.addEventListener("click", function() {
prompt("请输入新的进度值:", "");
});
另外,你需要注意的一点是,在JavaScript中给元素添加事件监听器时,事件监听器的处理函数中可以访问到触发事件的元素。例如在你的代码中,你可以在事件处理函数中使用this
关键字来访问触发事件的元素:
progressBar.addEventListener("click", function() {
prompt("请输入新的进度值:", this.value);
});
在这个例子中,this
关键字就代表了触发事件的元素(也就是进度条本身)。这样你就可以在事件处理函数中访问到进度条的值了。
.getElementsByClassName
取到的是 NodeList,不是具体的节点,不能直接用 .onclick = function () {}
绑定事件。.getElementById
取到的是节点,所以可以 .onclick=function() {}
绑定。
有几个方案:
建议用document.querySelector这个api, getElementByXXX除了id其他的(className,tagName,等等)返回的都是数组,无法绑定。
另外你第二段代码有点问题,我点击span标签,ul标签里的空白处也要我填入progress的value, 建议加判断
let list = document.getElementById("list")
list.onclick = function (e) {
if (e.target.tagName != 'PROGRESS') {
return
}
var num = prompt("请输入:")
e.target.value = num
}
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答4.8k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
1 回答3.1k 阅读✓ 已解决
方案一:
最直观的写法是:
方案二:
可以将点击事件委托到ul标签同一处理
实现效果不变
方案三:
可以通过数据驱动的方式,渲染列表,避免增加一项就要写一堆html