未定义javascript追加onclick func

未定义javascript追加onclick func,javascript,jquery,onclick,append,Javascript,Jquery,Onclick,Append,功能ABC(obj){ $(“#ID”).append('TEST'); } ABC({func:function(){alert(“ABC”);}}) HTML属性不是附加事件侦听器的好方法,因为它们在全局范围内运行obj存在于函数的作用域中,因此它对onclick属性中的代码不可见。您应该分别创建元素和附加侦听器: function ABC(obj) { // Create a DIV element var div = $("<div>"); // A

功能ABC(obj){
$(“#ID”).append('TEST');
}
ABC({func:function(){alert(“ABC”);}})

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

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);
}
功能ABC(obj){
$(“#问题标题”).append('TEST');
$(“body”).off(“click”、“#this div”).on(“click”、“#this div”,function(){obj.func()});
}
ABC({func:function(){alert(“ABC”);}});

这是100%的工作。。选中此项,您甚至可以放置除单击以外的事件

实际问题是,单击元素时,
ABC
函数将完成,其
obj
参数将超出范围。由于您将代码硬编码到单击事件代码中,
obj
在该点上没有意义,您得到的
obj未定义
错误

现在,HTML事件属性不以函数作为其值,而是采用可执行的JavaScript指令。因此,您不希望将
onclick
设置为函数,而是希望将其设置为要执行的JavaScript字符串,并且可以从传入的函数返回:

功能ABC(obj){
//通过调用存储在传入对象中的函数,我们可以
//注入适当的JavaScript以在单击元素时运行。
$(“#ID”).append('TEST');
}
ABC({
func:function(){return“警报('abc');”;}
});


obj.func()
function里面有什么?obj里面有什么?@AlivetoDie:
function(){alert(“abc”);}
如果你有很多项目要追加,你应该如何处理它们呢?@YongBinLim:你说的“一路”是什么意思?有一个不使用HTML事件属性的方法。我使用翻译。所以我的句子不自然。我有很多标签要“附加”去做。你想用上面的方法添加标签吗?@YongBinLim:如果你想问的话,你可以在一个循环中对任意数量的标签使用这个方法。但是,你实际上并没有解释问题或你的解决方案。为什么投票反对用一个可行的解决方案正确解释问题?在字符串中嵌入JavaScript不是一个好主意。例如,参见
setTimeout
@Ryan,这不是重点。我的回答不推荐这种方法。它正确地回答了这个问题,并显示了如何使它工作。我很确定这个想法是在单击时调用
obj.func()
,好的实践从来都不是重点。@Ryan回答这个问题永远是首要任务。这就是我的答案。
div.on("click", obj.func);
function ABC(obj) {

    $("#question-header").append('<div id="this-div">TEST</div>');
   $("body").off("click","#this-div").on("click","#this-div",function(){ obj.func(); });
}

ABC({func: function() { alert("abc"); } });