javascript - 了解使用 Javascript 监听节点列表中的点击事件

标签 javascript

因此,我构建了一个 Boostrap 页面,其中有一个子节点数组(或列表),可供从下拉菜单中进行选择。我想检测哪个节点被单击,然后在菜单按钮的新值中显示该值。

最初我尝试通过以下代码检测点击事件:

 for (var i = 0; i < menu.length; i++){

       menu[i].firstchild.innerHTML.addEventListener("click", function(){

            // Assign value of node clicked on to button 
            button.childNodes[0].nodeValue = menu[i].firstChild.innerHTML;

       });
 }

但是上面的方法不起作用,并且 menu[i].firstChild.innerHTML 似乎总是未定义。我想知道为什么会这样?

我使用另一个问题中的代码找到了问题的解决方案:

  for (var i = 0; i < menu.length; i++){

                    (function(index) {

                        console.log(menu[index]);
                        menu[index].addEventListener("click", function(){

                            for (var x = 0; x < menu.length; x++){

                                if (menu[x] == this){

                                    //alert(x); 
                                    //console.log(button.childNodes[0].nodeValue); 
                                    button.childNodes[0].nodeValue = menu[x].firstChild.innerHTML; 
                                }
                            }


                        }, false);                  

                    })(i);                                                                  
                }

来自:Detecting which node was clicked in javascript

但是,我无法真正理解这里发生了什么。我们实际上传递给第一个 for 循环的是什么?这似乎是 (function(index){//code})(i);我不能说我以前见过这种语法。那么第二个for循环的目的是什么呢?

如果有比我更好的程序员可以向我解释这里发生了什么,我将非常感激。

亲切的问候,

最佳答案

在您的初始代码中,您addEventListenerinnerHTML,它是字符串并且对点击充耳不闻。可以轻松修复。

for (var i = 0; i < menu.length; i++){
       menu[i].firstchild.addEventListener("click", function(){
            // Assign value of node clicked on to button 
            //**this** is "clicked" element and what was previously menu[i].firstChild
            //menu[i] is out of scope here (i == menu.length or something else)
            //button is hopefully in global scope.
            button.childNodes[0].nodeValue = this.innerHTML;
       });
 }

关于javascript - 了解使用 Javascript 监听节点列表中的点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38018699/

相关文章:

javascript - 如何测试 onClick 事件

javascript - 将表与更改的 id 一起追加

javascript - extjs4 从组合框中获取选定的值

javascript - 是否可以通过使用 onload 事件来衡量 gpu/cpu 的性能?

javascript - firebase 不返回 key ?

javascript - 如何从日期格式 YYYY-MM-DD 检查两个月是否相等?

javascript - 重复的代码,能不能更高效?

javascript - 当我们编辑表列值时更新数组

javascript - 如何存储已上传的图像。

javascript - Jest - DOM 相关和跨 JS 文件单元测试