当我尝试摧毁'我收到一个错误:
错误:在初始化之前无法调用对话框上的方法; 试图调用方法'销毁'
正如您所见,对话框是即时创建的。
选择"否"摧毁它就好了。
我认为因为我在post函数中我无法使用$(this)但我不知道为什么或如何访问对话框,因为它是动态创建的。
$('<div title="Apply for Position"><label>Do you want to apply for the <em>'+pos_title+'</em> position?</label></div>').dialog({
modal: true,
buttons: {
'yes': function(){
$.post('/user/handlers/job-actions.php', {ep_id: ep_id, type: 'apply', event_id: event_id}, function(r){
if (r.status === 'complete'){
button.html('<span class="halfsprite halfsprite-round_remove"></span>withdraw');
button.removeClass('apply');
button.addClass('withdraw');
$(this).dialog('destroy');
}
else{
console.log(r.msg);
}
}, 'JSON');
},
'no': function(){$(this).dialog('destroy');}
}
});
答案 0 :(得分:1)
问题是this
位于$.post
请求的回调函数中,因此它的上下文已经改变。尝试将对话框HTML保存到变量中,并在整个函数中引用该变量,如下所示:
var $dialog = $('<div title="Apply for Position"><label>Do you want to apply for the <em>'+pos_title+'</em> position?</label></div>');
$dialog.dialog({
modal: true,
buttons: {
"yes": function(){
$.post('/user/handlers/job-actions.php', {ep_id: ep_id, type: 'apply', event_id: event_id}, function(r) {
if (r.status === 'complete') {
button.html('<span class="halfsprite halfsprite-round_remove"></span>withdraw');
button.removeClass('apply');
button.addClass('withdraw');
$dialog.dialog('destroy');
} else {
console.log(r.msg);
}
}, 'JSON');
},
"no": function() {
$dialog.dialog('destroy');
}
}
});