簡體   English   中英

onclick屬性找不到全局函數

[英]onclick attribute doesn't find global function

我使用onlick事件來添加div,但是單擊時出現錯誤(Mozilla Firefox):“ ReferenceError:未定義myfoo”。 如果我將onclick事件更改為警報,則可以正常工作,但不適用於mysefl編寫的函數。

這是jsfiddle

http://jsfiddle.net/UJ85S/5/

function myfoo(x)
{
    alert(x);
}

$("#some").html('<div id="cool_div" onclick="myfoo('+"'xwe'"+');"></div>');

您能解釋什么地方嗎? (我可以指定assign.click事件,但是可以通過onclick嗎?)。

真正需要做的是不要讓jsFiddle將其包裝在onload事件中,因為它使用了創建新作用域的函數。 在此新范圍之外,您的功能將無法訪問。 了解正在發生的事情,而不是了解如何解決它(即,不僅將您的代碼黑客到對象窗口):

http://jsfiddle.net/UJ85S/12/

No wrap - in <body>

發生這種情況是因為您在$(window).load(function () {...})函數內部定義了myfoo (JSFIDDLE會這樣做):

您需要聲明一個全局函數。 您可以執行window.myfoo來聲明您的函數。

window.myfoo = function (x)
{
    alert(x);
}

JSFIDDLE

但是,是的, 污染全球范圍不是一個好習慣,這就是為什么最好使用$(...).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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM