获取"功能未在HTMLAnchorElement.onclick"中定义错误原因不明

时间:2018-03-28 16:18:47

标签: javascript jquery ajax webpage

我在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无效。

我是否在对代码结构做错了,或者它只是某处的语法错误?错误消息的含义是什么?

2 个答案:

答案 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!");