我在JavaScript中定义了一个按钮:
function MyFunction(){
$.post("servletname", {"element": variable}, function(data){
var action = document.createElement("a");
action.setAttribute("class", "button")
action.setAttribute("onclick", "doSomething(" + data + ")");
action.appendChild(randomNode);
})
}
然后在MyFunction
之外的相同代码中,我将函数doSomething
定义为:
function doSomething(dataFromJQuery){
//do things with dataFromJQuery
}
函数MyFunction()
在代码的前面某处被调用,当然,单击按钮时应该调用函数doSomething
。
但每次点击按钮,我都会收到错误
未捕获的ReferenceError:未定义doSomething 在HTMLAnchorElement.onclick
且doSomething
无效。
我是否在对代码结构做错了,或者它只是某处的语法错误?错误消息的含义是什么?
答案 0 :(得分:0)
所以,它似乎对我有用:
var action = document.createElement("a");
action.setAttribute("class", "button")
action.setAttribute("onclick", "doSomething('data')");
action.innerText = 'Action'
document.body.appendChild(action)
function doSomething(dataFromJQuery){
console.log(dataFromJQuery)
}
当然,我不得不稍微修改你的代码,以便它可以在代码片段中工作。但onclick
确实触发了。
换句话说,我没有看到任何错误,我们可能需要查看其余的代码。
您也可以尝试addEventListener
:
var action = document.createElement('a')
action.setAttribute('class', 'button')
action.addEventListener('click', () => doSomething(data))
注意匿名(箭头)功能,它允许我们将data
传递给doSomething
,而无需立即调用该功能。
答案 1 :(得分:0)
问题是传递的参数data
,它可能是一个字符串。
另一种方法是使用sigle引用'
function addLink(data) {
var action = document.createElement("a");
action.setAttribute("class", "button")
action.setAttribute("href", "#")
action.setAttribute("onclick", "doSomething('" + data + "')");
action.appendChild(document.createTextNode("Click me!!"));
//action.appendChild(randomNode);
document.body.appendChild(action);
}
function doSomething(dataFromJQuery) {
console.log(dataFromJQuery)
}
addLink("Hello from Ele!");
采用函数addEventListener
将事件绑定到元素:
function addLink(data) {
var action = document.createElement("a");
action.setAttribute("class", "button");
action.setAttribute("href", "#");
action.addEventListener('click', function() {
doSomething(data);
});
action.appendChild(document.createTextNode("Click me!!"));
//action.appendChild(randomNode);
document.body.appendChild(action);
}
function doSomething(dataFromJQuery) {
console.log(dataFromJQuery)
}
addLink("Hello from Ele!");