2016-11-17 131 views
1

我想在循环内部动态地创建按钮。点击按钮我想获取按钮的ID。下面的代码不起作用。谁能帮帮我吗。在按钮上点击一个ID

for(int i=1;i<5;i++) 
    { 
    var btn = document.createElement("button"); 
    btn.innerText = "button"+i; 
    btn.setAttribute("id", i); 
    btn.onclick = function(this){ 
    alert(this.id); 
    } 
    } 

在此先感谢

+0

您需要将按钮添加到文档中。 – randominstanceOfLivingThing

+3

'for(int i = 1; i <5; i ++)'是否有效的Javascript代码?我的意思是'int' –

回答

0

你必须追加孩子。你不能在这里使用int。使用var

for(var i=1;i<5;i++) 
 
    { 
 
    var btn = document.createElement("button"); 
 
    
 
    btn.innerText = ("button"+i); 
 
    btn.setAttribute("id", i); 
 
     document.body.appendChild(btn); // add this line 
 
    btn.onclick = function(){ 
 
    alert(this.id); 
 
    } 
 
    }

+0

并且你不能在函数中传递这个 – Mahi

+0

@ Mahi你能解释我吗,为什么我们不能在函数中传递'this'? – sanvi4

+0

@ sanvi4你不应该接受上述答案,否则这将是理解谁有同样问题的问题。因为上面的解决方案不会工作,因为函数参数中的'this'就像变量。和'this'不能变成可变的。它就像'var this; '所以你不能这样做 – Mahi

1

首先,您需要创建的元素添加到文档中,以便它会被添加到DOM。阅读tutorial

for(var i=1;i<5;i++) 
{ 
    var btn = document.createElement("button"); 
    btn.innerText = "button"+i; 
    btn.setAttribute("id", i); 
    document.body.appendChild(btn); 
    btn.onclick = function(){ 
    alert(this.id); 

    } 
} 
-1
for(var i = 1; i < 5; i++) 
{ 
    var btn = document.createElement("button"); 
    btn.innerText = "button"+i; 
    btn.setAttribute("id", i); 
    btn.onclick = function(e) { 
     alert(this.id); 
    } 
} 
+1

一些解释是为了这里。此代码示例与问题中的代码示例几乎完全相同,但不清楚此解决方案如何解决问题。 –

0

你好像遇到了两个问题:

  1. 您的for循环使用int声明循环变量i。在JavaScript中,您没有强大的输入功能,只需使用for (var i = 0; ...) {...}

  2. 您创建的按钮元素存在于代码中,按钮尚未添加到文档本身。通常,需要将新元素附加到页面上已存在的父元素(如大多数内容所在的body元素)。

检出JS Bin下面的一个工作示例。在这个例子中,我已经指定了一个id为“btn-container”的元素作为父元素。

JS Bin with working example.

+0

谢谢你Sebastian sangervasi – sanvi4

+0

没问题。是否有可能将此标记为已回答,还是“搁置”防止了这种情况? –