2016-09-24 275 views
0

我正在动态创建一个复选框。现在我想调用一个函数(让我们说你好世界),每当复选框被选中。我用setAttribute来调用函数,但是我在传递参数时遇到问题。我希望将i和j的值传递给函数。 以下是我的代码 -动态创建CheckBox并使用Onchange事件调用函数

function addTable(message) { 
var paxArray=new Array(); 
var mealsArray= new Array(); 
mealsArray=['Vegeterian Food','Non Vegeterian Food', 'Indian Continental','Chinese']; 
paxArray=message.data; 
for(var i=0;i<paxArray.length;i++){ 
    var x= document.createElement('tr'); 
    x.innerHTML=paxArray[i]; 
    document.getElementById("Content").appendChild(x); 
    for(var j=0;j<mealsArray.length;j++){ 
     var row=document.createElement('tr'); 
     var meal=document.createElement('td'); 
     var check_box=document.createElement('td'); 
     var check=document.createElement('input'); 
     check.type="checkbox"; 
     check.id="checkbox"+i+j; 
     check.setAttribute("onchange","Helloworld(i+j);"); 
     meal.innerHTML=mealsArray[j]; 
     check_box.appendChild(check) 
     row.appendChild(check_box); 
     row.appendChild(meal); 
     document.getElementById("Content").appendChild(row); 
    } 
} 
} 


    function Helloworld(index){ 
document.getElementById("text").innerHTML=index; 
    } 
+0

有一个非常好的onchange JavaScript属性,你可以设置。为什么属性?和“i + j”在html上下文中不存在。 – TigOldBitties

回答

1

在这里,我+你逝去的j是简单的字符不是变量值。 尝试: 说var i = 4; var j=3; 如果你想打电话Helloworld(43)

check.setAttribute("onchange","Helloworld("+i+j+");"); 

,如果你想打电话Helloworld(7)

var k=i+j; 
check.setAttribute("onchange","Helloworld("+k+");"); 
+0

哦,是的,它的工作。 – yashpandey

0

使用

function assignFunction(i, j) { 
    return function() { 
     Helloworld(i+j); 
    } 
} 
check.onchange = assignFunction(i+j); 
+0

是的,它确实有效。但是,无论何时点击任何复选框,“6”都是始终得到更新的数字。 6,这是两个阵列的长度的增加。 – yashpandey

+1

哦,是的,这是因为它正在运行(更改)时进行评估。 – TigOldBitties

+0

更新为有效答案。 – TigOldBitties

0

你可以做这样的

check.setAttribute("onchange",`"Helloworld(" + (i + j) + ");"`); 

如果你不这样做使用(i + j)并放在“Helloworld(”+ i + j +“);”,你会得到连接而不是

相关问题