当我单击标签时,提示生成结果
when i click label, prompts make result
我制作了HTML文件和js文件,但是我遇到了一些问题。
在HTML中有5个标签标签(没有特定的id
或class
名称),当我点击每个标签时,弹出(提示)出现,它使结果(更改样式)。
改变风格并不难,所以我很好,但我在提示符上有问题。
我写了下面的代码:
function changeCol(evnt) {
var theEvent = evnt ? evnt : window.event;
var label = document.getElementsByTagName("label");
label[0].addEventListener ("click", function (){
var one = prompt("Enter the color");
label[0].style.color = one;
});
label[1].addEventListener ("click", function (){
var two = prompt("Enter the color");
label[1].style.color = two;
});
label[2].addEventListener ("click", function (){
var three = prompt("Enter the color");
label[2].style.color = three;
});
}
但是当我先点击一个标签,它是可以的,当我点击第二个提示出现两次…第三次点击显示提示三次…
当我想看到提示时,我必须点击两次,也许是因为功能。
function loadevent(){ ...
if (label){
for (i=0;i < label.length; i++){
label[i].onclick = changeCol;
}
}
}
我该怎么办?
试试下面的代码片段:-
var label = document.getElementsByTagName("label");
function changeCol(element) {
element.addEventListener ("click", function (){
var promcolor= prompt("Enter the color");
element.style.color = promcolor;
});
}
function loadevent(){
if (label){
for (i=0;i < label.length; i++){
changeCol(label[i]);
}
}
}
loadevent();
我假设在HTML
下面<p><label for="1">label-1</label></p>
<p><label for="2">label-2</label></p>
<p><label for="3">label-3</label></p>
我没有看到太多使用loaddevent函数。但是看到这些点,我假设这里有一些其他的代码。但如果不是,你可以简单地使用下面的一个函数:
function loadevent(){
for (itr=0;itr < label.length; itr++){
label[itr].addEventListener ("click", function (){
var promcolor= prompt("Enter the color");
this.style.color = promcolor;
});
}
}
此外,您的代码的问题是,即使当您在loaddevent函数中迭代元素时,您也会为所有标签添加事件侦听器。这段代码不会发生这种情况。
问题:
实际代码的问题是,对于每个标签,您使用该标签的索引并根据该索引循环一个警告提示,这就是为什么您只获得第一个标签的一个提示,第二个标签的两个提示和第三个标签的三个提示。
解决方案:
最好的方法是使用addEventListener
,就像在你的第一个函数和循环通过所有标签使用document.getElementsByTagName("label")
和使用this
关键字来改变循环内的clicked label
的颜色,这是你需要的:
var labels = document.getElementsByTagName("label");
for (i = 0; i < labels.length; i++) {
labels[i].addEventListener("click", function() {
var prmt = prompt("Enter the color");
this.style.color = prmt;
});
}
<label> A</label><br>
<label> B</label><br>
<label> C</label><br>
<label> D</label><br>
<label> E</label><br>
注意:使用此代码,您不需要为标签指定任何id
或class
或其他属性。
然后你只需要把这段代码放入你的load函数中然后在windows load:
中调用它function loadevent(){
var labels = document.getElementsByTagName("label");
for (i = 0; i < labels.length; i++) {
labels[i].addEventListener("click", function() {
var prmt = prompt("Enter the color");
this.style.color = prmt;
});
}
]
在这里,您已经编写了for循环中打开提示符的脚本,因此它根据标签编号生成多个弹出窗口。也就是说,如果你点击了第4个标签,那么它将打开提示4次。
要避免这种情况,必须传递当前标签的索引。
function loadevent(){
if (label){
for (i=0;i < label.length; i++){
label[i].onclick = changeCol(i);
}
}
}
function changeCol(index,evnt) {
var theEvent = evnt ? evnt : window.event;
var label = document.getElementsByTagName("label");
label[index].addEventListener ("click", function (){
var current_color = prompt("Enter the color");
label[index].style.color = current_color;
});
}
- 奇怪的Javascript结果
- Javascript(jQuery)给了我奇怪的结果
- 提示使用服务器端事件处理程序激活JavaScript
- JSONP请求返回结果,但也触发error_callback
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- d3.js Chord图的动态工具提示
- Javascript,输出结果后页面不断刷新
- 这是使用html快照和谷歌获取的预期结果吗?SEO/SPA
- Javascript 可选类型提示
- 将地理编码结果转换为php变量以发布到mysql数据库
- AngularJS/HTML/Bootstrap元素用于动态搜索结果
- 单击按钮后启动javascript提示
- 基于给出意外结果的提示输入的逻辑
- 平板电脑友好的悬停工具提示,显示基于javascript函数结果的动态文本
- 提示搜索不显示搜索结果
- 如何在新的空白页上打印提示框输出结果,而不是在警告框本身上打印
- 如何在这个case语句中提示结果?
- Json结果提示下载
- 使用Javascript显示多个提示框的结果
- 当我单击标签时,提示生成结果