我似乎无法从对话框函数中获取对话框以进行销毁

时间:2014-09-16 20:44:20

标签: jquery dialog

当我尝试摧毁'我收到一个错误:

  

错误:在初始化之前无法调用对话框上的方法;   试图调用方法'销毁'

正如您所见,对话框是即时创建的。

选择"否"摧毁它就好了。

我认为因为我在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');}
        }
    });

1 个答案:

答案 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');
        }
    }
});