【问题标题】:Javascript function isn't recognized无法识别 Javascript 函数
【发布时间】:2017-06-04 22:13:18
【问题描述】:

我对javascript的了解不多,所以我不知道这里有什么问题, 我在 js 中动态创建 div,每个 div 在单击时调用一个函数,但该函数未被识别。这是代码的一部分

for (......) {
  var listatema = document.createElement("div");
  listatema.innerHTML += "<a href='javascript: void(0)' onClick='functest(" + pag + ")'>" + temat + "</a>";
  document.getElementById('menu').appendChild(listatema);}
}

“tema”是一个文本,函数“functest”有一个参数“pag[aux]”,这是一个数字。

函数是:

function functest(arg){
   console.log(arg)
}

我尝试的其他替代方法是更改​​:onClick='"+ functest(pag) +"':

我更改了引号“”的位置,该功能运行良好,但在页面加载时执行,它不等待点击。

【问题讨论】:

    标签: javascript html function onclick href


    【解决方案1】:

    如果您正在执行以下操作,您的代码应该可以工作:

    function functest(arg) {
      console.log(arg);
    }
    
    for (var i = 0; i < 10; i++) {
      var listatema = document.createElement("div");
      listatema.innerHTML += "<a href='javascript: void(0)' onClick='functest(" + i + ")'>" + i + "</a>";
      document.getElementById('menu').appendChild(listatema);
    }
    &lt;div id="menu"&gt;&lt;/div&gt;

    不过,我建议在文档元素对象上使用addEventListener 或设置onClick 处理程序,而不是设置innerHTML。请注意,不建议设置 innerHTML,尤其是在呈现用户输入时。见https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML#Security_considerations。在你的情况下,这可能不是一个真正的问题,但如果可以的话,最好避免它:)

    for (var i = 0; i < 5; i++) {
      var wrapper = document.createElement("div");
      var listatema = document.createElement("a");
      listatema.textContent = i;
      listatema.href = "javascript:void(0)";
      listatema.addEventListener('click', function(e) {
        console.log(this.i);
      }.bind({ i : i }));
      wrapper.appendChild(listatema);
      document.getElementById('menu').appendChild(wrapper);
    }
    &lt;div id="menu"&gt;&lt;/div&gt;

    【讨论】:

    • 在 JSFiddle 上测试类似的解决方案时,我一直在为这个问题绞尽脑汁。真正有趣的是,您的 first 解决方案在您的代码 sn-p 中非常适合我,但告诉我该函数在 JSFiddle 上未定义。我已经完全复制了你的代码。任何想法为什么会这样? Fiddle。您的第二个解决方案似乎在这两个地方都可以正常工作:)
    • 这很可能是脚本是如何注入到jsFiddle中的。我认为这是因为它们将函数封装在 onLoad 处理程序中,所以它没有提升到全局范围。如果您在 HTML 中添加嵌入式脚本,它应该可以工作 - jsfiddle.net/msindwan/yrL8ybgm/1。
    • 好像就是这样!感谢您的澄清 :) 尽管我不是提出问题的人,但在指出 JSFiddle 的有限范围时,您仍然对我有很大帮助。我已经赞成您的回答,但希望我也可以为您的评论奖励一些代表;)
    • 不!很高兴我能帮上忙
    • 谢谢,我解决了像 functest.bind(null, i) 那样添加“绑定”的问题,您的建议非常有帮助。
    【解决方案2】:
    onClick='functest(\""+ pag +"\")'
    

    你忘记引用参数了。

    【讨论】:

      猜你喜欢
      • 2011-07-10
      • 1970-01-01
      • 2018-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      相关资源
      最近更新 更多