为什么Jquery对话框会在$(this)上崩溃?

时间:2011-02-08 00:59:25

标签: javascript jquery

我有一段时间试图找出当对话框关闭或取消时下面的代码崩溃的原因。它在对话框按钮功能中使用($ this)的行上出错。

出于某种原因,如果我将值硬编码到addTaskDialog.html(AddTaskForm);有用。我甚至硬编码返回的ajax表单并且它有效...这个问题在所有浏览器中都会发生。

  $(function ()
{

    /*
    *  Initializes AddTask Dialog (only needs to be done once!)
    */
    var $dialog = $('<div></div>').dialog(
{
    width: 580,
    height: 410,
    resizable: false,
    modal: true,
    autoOpen: false,
    title: 'Basic Dialog',
    buttons:
        {
            Cancel: function ()
            {
                $dialog.dialog('close');
            },
            'Create Task': function ()
            {

            }
        },
    close: function ()
    {
        $dialog.dialog('close');
    }
});


    /*
    * Click handler for dialog
    */
    $('#AddTask').click(function ()
    {

        /* Ajax request to load form into it */
        $.ajax({
            type: 'Get',
            url: '/Planner/Planner/LoadAddTaskForm',
            dataType: 'html',
            success: function (AddTaskForm)
            {
                $dialog.html(AddTaskForm);
                $dialog.dialog('open');
            }
        });
    });



});

});

2 个答案:

答案 0 :(得分:1)

好的,我想我知道发生了什么事。在您的成功回调中,您在$(this)中引用了AddTaskDialogOptions,问题是此范围$(this)中的$("#AddTask")不再引用$(this),因此您需要设置一个变量来保留对var that; $('#AddTask').click(function () { that = $(this); /* Ajax request to load form into it */ $.ajax({ type: 'Get', url: '/Planner/Planner/LoadAddTaskForm', dataType: 'html', success: function (AddTaskForm) { var addTaskDialog = $('<div></div>'); addTaskDialog.dialog(AddTaskDialogOptions); addTaskDialog.html(AddTaskForm); addTaskDialog.dialog('open'); } }); }); var AddTaskDialogOptions = { width: 580, height: 410, resizable: false, modal: true, autoOpen: false, title: 'Basic Dialog', buttons: { Cancel: function () { that.dialog('close'); }, 'Create Task': function () { } }, close: function () { that.dialog('destroy').remove(); } } 的引用如此:

{{1}}

答案 1 :(得分:0)

我明白了。我不知道我在哪里得到这个代码,但它导致了问题,所以我把它拿出来,一切正常。

    close: function ()
{
    $dialog.dialog('close');
}