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
为什么不定义它?
我该如何解决?
答案 0 :(得分:0)
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);
}
。您应该创建元素并单独附加侦听器:
obj.func
函数表达式可以访问其父作用域。
如果this
未使用div.on("click", obj.func);
且未返回值,您也可以直接将该函数用作侦听器:
function timeout(ms, promise) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
reject(new Error("timeout"))
}, ms);
promise.then(resolve, reject)
})
};
timeout(1000, fetchData.fetchGetResp(restUrl, userToken)).then(responseJson => {
// console.log(res);
if (responseJson != '' && responseJson != undefined) {
}else {
console.log(responseJson);
try {
} catch (error) {
alert(error.message);
console.log(error + 'from js file');
}
}
}).catch(error => {
alert(error.message + "Please try again after sometime");
});
答案 1 :(得分:0)
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"); } });
这是100%正常工作..检查一下,你甚至可以把事件放在点击...
之外答案 2 :(得分:-1)
实际问题是,当单击元素时,ABC
函数将完成,其obj
参数将超出范围。由于您的代码会将obj
硬编码到点击事件代码中,因此obj
没有任何意义,您会收到obj is not defined
错误。
现在,HTML事件属性不会将函数作为其值,而是采用可执行的JavaScript指令。因此,您不希望将onclick
设置为函数,您希望将其设置为要执行的JavaScript字符串,并且可以从传入的函数返回:
function ABC(obj) {
// By invoking the function stored in the passed in object, we can
// inject the appropriate JavaScript to run when the element gets clicked.
$("#ID").append('<div onclick="' + obj.func() + '">TEST</div>');
}
ABC({
func: function() { return "alert('abc');"; }
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="ID"></div>
&#13;