0

我正在使用 ajaxform 处理我的表单提交并且遇到了选项变量的问题。我正在尝试让成功回调将一些 HTML 附加到相对元素,因此我正在使用$(this)我通常会使用的方法。我无法让它工作,我在这里错过了一些简单的东西吗?有什么理由$(this)不工作吗?插件网址是http://malsup.com/jquery/form/

提前致谢

一种

选择器引用元素等提交 ajaxform 插件触发。如下$('#formSEIncome').ajaxForm(options)

jQuery的选项如下:

var options = {             
       success: function() { 
       $(this).parents('.trm_expense_cats').find('.itemlist').append('<li>Test</li>');
        alert('ok');
    }   // post-submit callback 
};
4

2 回答 2

1

this由每个函数在调用时设置。您的代码如下所示:

// OUTSIDE the callback

var options = {             
       success: function() { 
         // INSIDE the callback
         $(this).parents('.trm_expense_cats').find('.itemlist').append('<li>Test</li>');
         alert('ok');
    }
};

// OUTSIDE the callback
$('#formSEIncome').ajaxForm(options)

您可能希望this回调内部和外部的值相同,但事实并非如此this 回调根据调用方式设置自己的值。在这里,this回调在运行时决定了回调内部的值。

如果您想保存“外部” this,请参阅$(this) inside AJAX success not working for how to use $.proxy。您还可以将外部保存在回调外部this的变量(通常命名为)中。that由于 JavaScript 函数可以访问其包含函数的变量,回调将可以访问that

// OUTSIDE the callback
// save outer this
var that = this;

var options = {             
       success: function() { 
         // INSIDE the callback
         // we use that, not this, to get the outer this
         $(that).parents('.trm_expense_cats').find('.itemlist').append('<li>Test</li>');
         alert('ok');
    }
};

// OUTSIDE the callback
$('#formSEIncome').ajaxForm(options)
于 2013-07-29T13:54:19.563 回答
0

答案是使用 jQuery 插件中提供的成功功能,而不是我上面所做的。所以

事件处理程序:

$('#formSEIncome').ajaxForm(options)

选项变量:

var options = { 
        target:        this  // target element to be updated with server response 
        ,success:       showResponse          
}; 

成功函数:

function showResponse(responseText, statusText, xhr, $form)  { 
$form.parents('.trm_expense_cats').find('.itemlist').append('<li>Test</li>');
    alert('ok');
}

因此,this在 options.success 对象中的使用解决了这个问题。

于 2013-07-30T10:33:55.267 回答