問題是你的函數不再是全局變量。這是一件好事™。 (請參閱下面的原因。)
有沒有辦法解決這個問題?
到目前爲止最好的方法是而不是這樣的事件掛鉤。相反,保持你的代碼和標記分開,並使用jQuery的on
等來連接你的函數。請參閱下文了解更多。
但是,如果你覺得你有,你可以通過在window
賦予它們爲屬性讓你的功能全局:
(function($) {
window.loadFullPost = function() {
// ...
};
)(jQuery);
或
(function($) {
function loadFullPost() {
// ...
}
window.loadFullPost = loadFullPost;
)(jQuery);
所以,你會怎麼辦
<a onclick="loadFullPost('<?=get_permalink()?>?ajax=true','<?=$post->post_name?>',<?=$post->ID?>)">Read more</a>
...不使用全局函數?就像這樣:
<a class="load-full-post" data-permalink="<?=get_permalink()?>" data-ajax=true data-post-name="<?=$post->post_name?>" data-post-id="<?=$post->ID?>">Read more</a>
,然後一個處理程序爲他們
$(document).on("click", ".load-full-post", function() {
var link = $(this);
// Use the values from link.attr("data-permalink") and such
// to do the work
});
或者,如果你想使用現有loadFullPost
功能:
$(document).on("click", ".load-full-post", function() {
var link = $(this);
return loadFullPost(
link.attr("data-permalink"),
link.attr("data-ajax") === "true",
link.attr("data-post-name"),
+link.attr("data-post-id") // (+ converts string to number)
);
});
我要指出,你會得到人民告訴你通過data
功能訪問那些data-*
屬性。你可以做到這一點,但除非你使用data
的各種附加功能,這是不必要的開銷(爲數據創建jQuery的緩存等)。data
是而不是data-*
屬性的訪問函數,它比這更多(也更少)。
您也可以將您的信息作爲JSON:
<a class="load-full-post" data-postinfo="<?=htmlspecialchars(json_encode(array("permalink" => get_permalink(), "ajax" => true, "name" => $post->post_name, "id" => $post->ID))0?>">Read more</a>
(或類似的東西,我的PHP福弱)
然後:
$(document).on("click", ".load-full-post", function() {
var postInfo = JSON.parse($(this).attr("data-postinfo"));
return loadFullPost(
postInfo.permalink,
postInfo.ajax,
postInfo.name,
postInfo.id
);
});
爲什麼使你的功能非全球化是一件好事™:全球namespac e是很擁擠,特別是當你處理多個腳本和插件和Wordpress本身。您創建的全局變量越多,與另一個腳本發生衝突的機率就越大。通過將你的函數很好地包含在你的範圍函數中,你可以避免跺腳別人的函數/元素/任何東西,反之亦然。
優秀的答案和解釋 –
感謝這一點 - 不優秀解釋只有如何,但爲什麼。它的工作原理比以前更快!我使用第二個示例(使用非全局調用,但使用現有函數),因爲它也在別處調用。一個非常微小的變化是需要的,因爲ajax標準實際上被設置爲鏈接的一部分而不是其自己的數據輸入,但是從我的問題來看,這並不明確。 – BFWebAdmin