javascript append onclick 函数未定义

标签 javascript jquery onclick append

function ABC(obj) {
  $("#ID").append('<div onclick="obj.func();">TEST</div>');
}

ABC({func: function() { alert("abc"); } })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="ID"></div>

如果运行此函数,将无法运行 obj.func

为什么不叫define呢?

如何解决?

最佳答案

HTML 属性不是 append 事件监听器的好方法,因为它们在全局范围内运行。 obj 存在于函数的作用域中,因此它对于 onclick 属性中的代码不可见。您应该创建元素并单独 append 监听器:

function ABC(obj) {
    // Create a DIV element
    var div = $("<div>");

    // Add an event listener that calls the function
    div.on("click", function () {
        obj.func();
    });

    // Append the created element to #ID
    $("#ID").append(div);
}

函数表达式确实可以访问其父作用域。

如果obj.func不使用this并且不返回值,您也可以直接使用该函数作为监听器:

div.on("click", obj.func);

关于javascript append onclick 函数未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48017544/

相关文章:

javascript - 如何在 REACT js 的 .map() 函数内仅禁用选定的按钮 onClick

javascript - 如何区分 onKeyDown 和 onClick 事件(输入 =“radio” )

javascript - jQuery 选项卡 : Get rid of 'previous' navigation button on second tab

javascript - 计算偏移旋转以使齿轮正确啮合?

javascript - 通过 AJAX 传递图像

Javascript onclick 更改变量值

javascript - 调用函数会出现引用错误,因为函数未定义

javascript - 如何仅从命令行检查 JavaScript 代码的语法错误?

javascript - 使用jquery基于连字符后搜索<li>内容

javascript - 使用箭头键导航