Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单击返回按钮id-JavaScript_Javascript_Html_Closures_Dom Events - Fatal编程技术网

单击返回按钮id-JavaScript

单击返回按钮id-JavaScript,javascript,html,closures,dom-events,Javascript,Html,Closures,Dom Events,我正在制作一个程序,该程序应该可以在加载时生成一列按钮。 之后,单击时,它应该创建新的按钮列,并显示所单击按钮的id 当应该创建新的按钮列时,它可以正常工作,但它会显示列中每个按钮的id。它甚至会返回下一列的ID。加载时显示第一个按钮列的ID 有人能帮我让它只显示被点击的按钮的id吗。 代码如下: <html> <head> <style> .addItem { width: 80px; float: left;} </style> <

我正在制作一个程序,该程序应该可以在加载时生成一列按钮。 之后,单击时,它应该创建新的按钮列,并显示所单击按钮的id

当应该创建新的按钮列时,它可以正常工作,但它会显示列中每个按钮的id。它甚至会返回下一列的ID。加载时显示第一个按钮列的ID

有人能帮我让它只显示被点击的按钮的id吗。 代码如下:

<html> <head>
<style>
.addItem {
  width: 80px;
  float: left;} </style>
<script>
var lev = 0; var levmax=5;var some;

function addBu(){
    repeat();
};

function repeat(){
    if(lev<levmax){
        lev++;
        var bo = document.getElementById("kod");
        var di = document.createElement('DIV');
        di.className="addItem";
        for (var i=0; i<4; i++){
            var bu= document.createElement('BUTTON');  
            var te = document.createTextNode('Text');
            var te1 = document.createTextNode(lev.toString());
            var br = document.createElement('BR');
            bu.id=(lev*10+i).toString();
            some=(lev*10+i).toString();         
            bu.addEventListener("click", repeat);
            bu.addEventListener("click" , reply_clickk(some));      
            bu.appendChild(te);
            bu.appendChild(te1);
            di.appendChild(bu);
            di.appendChild(br);     
        }       
        bo.insertBefore(di, bo.childNodes[0]);  
    }   

    function reply_clickk(clicked_id){
        alert(clicked_id);
    };

};
</script>
</head> 
<body id="kod" onload="addBu()">
</body></html>

.addItem{
宽度:80px;
浮动:左;}
var-lev=0;var-levmax=5;变种一些;
函数addBu(){
重复();
};
函数重复(){

如果(lev问题是调用事件处理程序并将其返回值附加到click事件而不是函数

bu.addEventListener("click" , reply_clickk(some));  
你可能更想要这样的东西

bu.addEventListener("click" , function(e){reply_clickk(e.target.id)});
此外,您的
some
变量是全局变量;将其更改为
var some
,以确定您的函数范围
repeat

var some=(lev*10+i).toString();  

请参见要添加如下侦听器的

bu.addEventListener("click" , reply_clickk(some));
不幸的是,
reply\u clickk(some)
是一个返回
undefined
的函数调用。您必须推迟函数调用,即返回另一个函数:

function reply_clickk(clicked_id){
    return function () {
        alert(clicked_id);
    };
};

您必须使用闭包来保留按钮id

工作代码

var-lev=0;
var-levmax=5;
变种一些;
函数addBu(){
重复();
};
功能回复\u点击K(点击\u id){
警报(单击了\u id);
};
函数重复(){
如果(lev
.addItem{
宽度:80px;
浮动:左;
}

如果您需要一些传统信息,请告诉我