[英]onclick attribute doesn't find global function
我使用onlick事件來添加div,但是單擊時出現錯誤(Mozilla Firefox):“ ReferenceError:未定義myfoo”。 如果我將onclick事件更改為警報,則可以正常工作,但不適用於mysefl編寫的函數。
這是jsfiddle
function myfoo(x)
{
alert(x);
}
$("#some").html('<div id="cool_div" onclick="myfoo('+"'xwe'"+');"></div>');
您能解釋什么地方嗎? (我可以指定assign.click事件,但是可以通過onclick嗎?)。
您真正需要做的是不要讓jsFiddle將其包裝在onload事件中,因為它使用了創建新作用域的函數。 在此新范圍之外,您的功能將無法訪問。 了解正在發生的事情,而不是了解如何解決它(即,不僅將您的代碼黑客到對象窗口):
No wrap - in <body>
發生這種情況是因為您在$(window).load(function () {...})
函數內部定義了myfoo
(JSFIDDLE會這樣做):
您需要聲明一個全局函數。 您可以執行window.myfoo
來聲明您的函數。
window.myfoo = function (x)
{
alert(x);
}
但是,是的, 污染全球范圍不是一個好習慣,這就是為什么最好使用$(...).on("click", function () { alert(...) })
處理程序。
我不鼓勵在HTML中使用on...
屬性,因為這也是另一種不好的做法 。
您的代碼變為:
function myfoo (x)
{
alert(x);
}
var $divToAppend = $("<div id='cool_div'>")
$divToAppend.on("click", function () {
myfoo("hello");
});
$("#some").html($divToAppend);
還有一個演示 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.