即使在定义函数后,onclick属性也不起作用

时间:2015-11-03 17:51:15

标签: javascript html crosswalk

我通过使用像这样的for循环来动态填充html

function htmlpopulate() {
  /*some DOM manipulations*/
  setInterval(loadhtml, 5000); //getting live data
}

function loadhtml {
  activediv.innerHTML = '';
  for (i = 0; i < userarray.length; i++) {
    var temp = userarray[i].trim();
    activediv.innerHTML += '<p onclick="makecall(' + "'" + temp + "'" + ');return false;")">' + temp + '</p><br/>';
  }
}

function makecall(data) {
  console.log(data);
}

输出:未定义makecall
如何使内联函数调用定义的函数?

3 个答案:

答案 0 :(得分:2)

必须在全局上下文中定义

function makecall

window.makecall = function (data) {
  console.log(data);
};

此外,您需要在

中整理引号和括号
activediv.innerHTML += '<p onclick="makecall(' + "'" + temp + "'" + 
  ');return false;")">' + temp + '</p><br/>';
返回false;&#34; 后,您不需要)&#34;

答案 1 :(得分:1)

以下是JSFiddle表示带有点击功能的动态创建按钮。

如果您无法绑定功能,也可以尝试此操作:

document.getElementById("btnID").onclick = makeCall;

代码

&#13;
&#13;
function createHTML(){
    var div = document.getElementById("content");
    var _html = "";
	for(var i=0; i<5;i++){
    	_html += "<button onclick='notify("+i+")'>btn " + i +"</button>";
    }
    div.innerHTML = _html;
}

function notify(str){
	console.log("Notify" + str);
}


function print(data) {
	console.log(data);
}

function registerEvent(){
    var btnList = document.getElementsByTagName("button");
	document.getElementById("btnID").onclick = function(){ print(btnList) };
}

(function(){
	createHTML();
    registerEvent();
})()
&#13;
<div id="content"></div>
<button id="btnID">BTN ID</button>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

在那里,你要定义makecall(),但你需要事后调用它,就像这样:

makecall(the data you want to use);