我通过onlick事件添加了div,但是点击了一个错误(Mozilla Firefox):“ReferenceError:myfoo未定义”。如果我将onclick事件更改为警报,它可以正常工作,但不能使用mysefl编写的函数。
这是jsfiddle
function myfoo(x)
{
alert(x);
}
$("#some").html('<div id="cool_div" onclick="myfoo('+"'xwe'"+');"></div>');
请你解释一下是什么问题? (我明白可以分配.click事件,但是可以通过onclick吗?)。
答案 0 :(得分:3)
你真正需要做的是不要让jsFiddle将它包装在onload事件中,因为它使用了一个创建新范围的函数。然后,您的功能无法在此新范围之外访问。了解正在发生的事情,不学习如何绕过它(即不仅仅是将代码破解到窗口对象):
No wrap - in <body>
答案 1 :(得分:2)
这种情况正在发生,因为您在myfoo
函数内定义了$(window).load(function () {...})
(JSFIDDLE会这样做):
您需要声明一个全局函数。您可以window.myfoo
来声明您的功能。
window.myfoo = function (x)
{
alert(x);
}
但是, polute 全局范围并不是一个好习惯,这就是为什么最好使用$(...).on("click", function () { alert(...) })
处理程序。
我不鼓励在HTML中使用on...
属性,因为it's also another bad practice。
您的代码变为:
function myfoo (x)
{
alert(x);
}
var $divToAppend = $("<div id='cool_div'>")
$divToAppend.on("click", function () {
myfoo("hello");
});
$("#some").html($divToAppend);
这里是DEMO。