Javascript 使用addEventListener包含变量
我刚刚开始学习JavaScript,并制作了一个单击函数,根据单击的Javascript 使用addEventListener包含变量,javascript,Javascript,我刚刚开始学习JavaScript,并制作了一个单击函数,根据单击的li元素来更改I的值。可以使用addEventLisener发送变量,用if语句检查,而不是使用3x基本相同的函数。因为如果我再添加1或2个li,就会添加很多不必要的代码 HTML: 因此,当单击其中一个li元素时,它将更改当前显示的img。绑定到列表,而不是列表项-…: document.getElementById('ul1').addEventListener('click', function (e) { var
li
元素来更改I
的值。可以使用addEventLisener
发送变量,用if语句检查,而不是使用3x基本相同的函数。因为如果我再添加1或2个li
,就会添加很多不必要的代码
HTML:
因此,当单击其中一个li
元素时,它将更改当前显示的img。绑定到列表,而不是列表项-…
:
document.getElementById('ul1').addEventListener('click', function (e) {
var li = e.target;
alert(li.id); // list1, list2, respectively, etc.
});
绑定到列表,而不是列表项-…
:
document.getElementById('ul1').addEventListener('click', function (e) {
var li = e.target;
alert(li.id); // list1, list2, respectively, etc.
});
正如蒂姆所说,绑定到列表并使用e.target
。然后,根据e.target.innerHTML
更改i
(因为出于您的目的,innerHTML
类似于id
,但更简单),这样做更容易
假设
元素现在具有id
的列表“
:
正如Teemu所说,绑定到列表并使用e.target
。然后,根据e.target.innerHTML
更改i
(因为出于您的目的,innerHTML
类似于id
,但更简单),这样做更容易
假设
元素现在具有id
的列表“
:
每个不需要单独的代码
以下是如何在单个功能中执行此操作:
HTML:
- 1
- 2
- 3
JavaScript:
var list1 = getElementById('list1');
var list2 = getElementById('list2');
var list3 = getElementById('list3');
list1.addEventListener("click", clicked1);
list2.addEventListener("click", clicked2);
list3.addEventListener("click", clicked3);
var i = 0;
function clicked1(){
i= 0;
loop();
}
function clicked2(){
i = 1;
loop();
}
function clicked3(){
i = 2;
loop();
}
function loop(){
if (i > 2){
i=0;
}
var imageloop = getElementById('slideshow').getElementsByTagName('img');
imageloop[0].src = 'image' + i;
i++
setTimeout(loop,3000);
}
var clicked_li=0; /* It'll store the number of <li> being clicked */
var ul=document.getElementById("All_List"); /* <ul> Element with all <li> */
window.onload=function(){
var lis=ul.getElementsByTagName("li"); /* All <li>'s from <ul> */
for(var i=0;i<lis.length;i++){
var li=lis[i]; /* Specific <li> from <ul> ie, lis[0] means first <li> of <ul> */
li.addEventListener("click", function(){ /* Listen and bind click event to that <li> */
clicked_li=getIndex(this); /* Store Which <li> Was clicked in clicked_li */
alert("'list"+clicked_li+"' was clicked!");
/* if you just want to get the id you can use event.target.id; instead of getIndex(); */
}, false);
}
};
function getIndex(node) {
var childs = node.parentNode.getElementsByTagName("li"); /* Get parent <ul> and all child <li> of that parent */
for (var i = 0; i < childs.length; i++) {
if (node == childs[i]) break; /* Find which <li> from current <ul> was clicked */
}
return (i+1); /* Return No.(index) of that <li> starting with 1 */
}
var\u li=0;/*它将存储被单击的的数量*/
var ul=document.getElementById(“所有列表”);/*具有所有- */
window.onload=function(){
var lis=ul.getElementsByTagName(“li”);/*所有
- 来自
*/
对于(var i=0;i,每个
不需要单独的代码
以下是如何在单个功能中执行此操作:
HTML:
- 1
- 2
- 3
JavaScript:
var list1 = getElementById('list1');
var list2 = getElementById('list2');
var list3 = getElementById('list3');
list1.addEventListener("click", clicked1);
list2.addEventListener("click", clicked2);
list3.addEventListener("click", clicked3);
var i = 0;
function clicked1(){
i= 0;
loop();
}
function clicked2(){
i = 1;
loop();
}
function clicked3(){
i = 2;
loop();
}
function loop(){
if (i > 2){
i=0;
}
var imageloop = getElementById('slideshow').getElementsByTagName('img');
imageloop[0].src = 'image' + i;
i++
setTimeout(loop,3000);
}
var clicked_li=0; /* It'll store the number of <li> being clicked */
var ul=document.getElementById("All_List"); /* <ul> Element with all <li> */
window.onload=function(){
var lis=ul.getElementsByTagName("li"); /* All <li>'s from <ul> */
for(var i=0;i<lis.length;i++){
var li=lis[i]; /* Specific <li> from <ul> ie, lis[0] means first <li> of <ul> */
li.addEventListener("click", function(){ /* Listen and bind click event to that <li> */
clicked_li=getIndex(this); /* Store Which <li> Was clicked in clicked_li */
alert("'list"+clicked_li+"' was clicked!");
/* if you just want to get the id you can use event.target.id; instead of getIndex(); */
}, false);
}
};
function getIndex(node) {
var childs = node.parentNode.getElementsByTagName("li"); /* Get parent <ul> and all child <li> of that parent */
for (var i = 0; i < childs.length; i++) {
if (node == childs[i]) break; /* Find which <li> from current <ul> was clicked */
}
return (i+1); /* Return No.(index) of that <li> starting with 1 */
}
var clicked_li=0;/*它将存储被单击的- 的数量*/
var ul=document.getElementById(“All_列表”);/*
包含All- */
window.onload=function(){
var lis=ul.getElementsByTagName(“li”);/*所有
- 来自
*/
对于(var i=0;i而言,这是Vedant Terkar回答的“改进/更清晰”部分。这可能会在以下方面提供更清晰的信息:
他给出的答案
如果我们给
ul
id组。我们不需要ul
中每个列表项的id
<ul id="group">
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
我们将i
设置为一个全局变量,并等于0,假设它在不调用任何其他变量的情况下将显示图像(0)
window.onload=function(){
var lis=document.getElementById("group").getElementsByTagName('li');
现在,我们正在创建一个名为lis
的Nodelist
。然后我们通过Nodelist
循环查看正在单击的列表元素
for(i=0;i<lis.length;i++){
var li=lis[i];
li.addEventListener("click",index, false);
}
}
function index(){
var lis = document.getElementById("group").getElementsByTagName('li');
i = getIndex(this);
for(var a=0; a < lis.length; a++){
if(a ==i){
lis[i].innerHTML = 'Choosen';
}else{
lis[a].innerHTML = 'list'+a;
}
}
}
function getIndex(node) {
var childs = node.parentNode.getElementsByTagName("li");
for (var i = 0; i < childs.length; i++) {
if (node == childs[i]) break;
}
return (i);
}
for(i=0;i这是对Vedant Terkar答案的“改进/更清晰”。这可能会在以下方面提供更清晰的信息:
他给出的答案
如果我们给ul
id组。我们不需要ul
中每个列表项的id
<ul id="group">
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
我们将i
设置为一个全局变量,并等于0,假设它在不调用任何其他变量的情况下将显示图像(0)
window.onload=function(){
var lis=document.getElementById("group").getElementsByTagName('li');
现在,我们正在创建一个名为lis
的Nodelist
。然后我们通过Nodelist
循环查看正在单击的列表元素
for(i=0;i<lis.length;i++){
var li=lis[i];
li.addEventListener("click",index, false);
}
}
function index(){
var lis = document.getElementById("group").getElementsByTagName('li');
i = getIndex(this);
for(var a=0; a < lis.length; a++){
if(a ==i){
lis[i].innerHTML = 'Choosen';
}else{
lis[a].innerHTML = 'list'+a;
}
}
}
function getIndex(node) {
var childs = node.parentNode.getElementsByTagName("li");
for (var i = 0; i < childs.length; i++) {
if (node == childs[i]) break;
}
return (i);
}
用于(i=0;在处理函数中,单击ul
,从的id
提取数字,并使用该数字代替i
。简短而简单。在处理函数中,单击ul
,从的id
提取数字,并使用该数字代替i
。简短而简单。这是一个好的开始,只添加一点代码,这就像一个符咒。对于我需要使用它的目的。这是一个好的开始,只添加一点代码,这就像一个符咒。对于我需要使用它的目的。我只是不知道人们在投反对票时会怎么想,这不关他们的事,但他们仍然这么做。这真的很糟糕。他们必须强制我个人认为这是一个很好的答案,因为点击的li elemets函数组代表从0开始的节点列表,而不是从1开始的id。在第一种情况下,我想删除id以获得更为动态的方式,+1我没有否决投票,但你的代码促进了反模式rns、非可伸缩性、重复、冗余和隐式变量声明,以及混乱的语法格式——所有这些都在同一个答案中。这个答案是如何获得投票的,这是一个谜,更不用说被接受的答案是什么“真的很糟糕”,因为现在有活动授权问题的未来人会来到这里,看到你糟糕的建议,并认为这是他们应该做的。如果这是你最好的答案,太好了,谢谢你的努力-当你被叫出时抱怨,长大点。@AlienWebguy感谢你解释代码的错误,我编辑了它,希望现在很好。第二部分我来这里是为了帮助人们,这是我最喜欢的,所以当有人批评(否决票)时,我相信他至少应该告诉我出了什么问题?是的,我来这里不是为了尽我最大的努力,只是为了帮助人们完成代码工作。我也不是在抱怨。是的,每个人都有权表达他们的观点。我试图给团队提出建议,让他们能够使用简单的技术来提高用户的热情。+1用于解释。@Nicco,我很高兴我可以帮助你。我只是不知道人们在投否决票时会怎么想,这不关他们的事,但他们还是这么想。这样做真的很糟糕。他们必须用否决票强制发表评论,否则没有用。我个人认为这是一个很好的回答,s