我正在尝试从另一个js文件中的一个文件调用一个函数。
general.js
function delete_post(post_id, post_type, nonce) {
$.post(Ajax.ajaxurl, { action: 'delete_post', post_id: post_id, nonce: nonce, post_type: post_type}, function (data) {
var result = $.parseJSON(data);
if (result.status == 'error') {
$('#post_'+post_id).prepend('<div class="alert alert-danger">' + result.message + '</div>');
}
if (result.status == 'success') {
$('#post_'+post_id).fadeOut(1000, function(){
$(this).remove();
});
}
});
}
details.js
$('body').on('click', '.remove-row', function (e) {
e.preventDefault();
var post_id = $(this).attr('data-target');
var nonce = $(this).attr('data-nonce');
var parent_id = $(this).attr('data-parent');
var post_type = $(this).attr('data-post_type');
bootbox.confirm(Ajax.are_you_sure, function(result) {
if (result) {
delete_post(post_id, post_type, nonce);
}
});
});
在页面上,它们以正确的顺序加载:
<script type='text/javascript' src='http://domain.com/js/general.js?ver=3.9.1'></script>
<script type='text/javascript' src='http://domain.com/js/details.js?ver=3.9.1'></script>
但是,当我点击remove-row
按钮时,我会Uncaught ReferenceError: delete_post is not defined
。
我错过了什么?
答案 0 :(得分:1)
该错误告诉我们您没有显示general.js
的全部内容,特别是delete_post
的函数声明位于另一个函数内(下面是一个可能的示例)。所以它不是全球性的。
如果你想让它成为一个全球性的,你可以把这一行放在general.js
中:
window.delete_post = delete_post;
window
对象的属性是全局变量。
一般情况下,我建议将全局变量保持在最低限度,因此您可能希望在这些行中使用一个全局对象用于所有内容:
if (!window.myApp) {
window.myApp = {};
}
window.myApp.delete_post = delete_post;
...然后代替
delete_post(post_id, post_type, nonce);
...在您的其他文件中,请使用
myApp.delete_post(post_id, post_type, nonce);
当我说它在另一个函数中时,这是一个例子:
$(document).ready(function() {
function delete_post() {
// ...
}
});
您的示例可能略有不同,但这就是要点。