注意:如果你理解我的问题,我的标题非常糟糕,请帮助我改进它
我正在使用ajaxform提交我的所有表单。我能够以编程方式成功地为每个表单添加反馈div。我想在我的页面中仅选择当前表单。我正在使用以下代码。
$('form').append('<div class="feedback" />');
$('form').ajaxForm
({
success: function(responseText)
{
if(responseText=="1")
{
$(this).clearForm();
$(this).children('INPUT,select').eq(0).focus();
}
else
{
alert($(this).children().length); // This gives me 0
$(this).children('.feedback').eq(0).html(responseText);
}
}
});
只有当我在整个页面中使用 $('form')而不是$(this)时才能成功完成上述操作,但是当我在页面中有多个表单时会出现问题
答案 0 :(得分:2)
如果仔细观察文档,会看到success
回调传递了4个参数
1.) responseText or responseXML value (depending on the value of the dataType option).
2.) statusText
3.) xhr (or the jQuery-wrapped form element if using jQuery < 1.4)
4.) jQuery-wrapped form element (or undefined if using jQuery < 1.4)
对当前表单实例
使用最后一个参数而不是$(this)
<强> See options tab of docs 强>
提问者更新:我上面的答案中的工作代码是
而不是$(this)
我可以关注
$('form').append('<div class="feedback" />');
var options = { success: showResponse };
$('form').ajaxForm(options);
function showResponse(responseText, statusText, xhr, $form)
{
if(statusText == 'success')
$form.children('.feedback').html(responseText);
}
<强> Link of example followed 强>
答案 1 :(得分:1)
$(this)仅在成功回调调用的上下文是表单节点本身时才有效。
如果它不起作用,您可以随时缓存引用,并且您可以在回调范围内访问它:
var $form = $('form');
$form.ajaxForm({
success: function (responseText) {
$form.clearForm();
}
});
我没有在响应中包含您的逻辑,因为响应是具有多个唯一属性的对象。有关属性
,请参阅 @charlietfl 的答案------ UPDATE ---------
如果您遇到的问题是在附加div后需要访问那个表单,请记住“append”以及影响节点的所有其他jQuery方法是可链接的:
$('form').append('<div>My Div</div>').ajaxForm(options....)
希望调用成功处理程序的上下文是表单节点本身,如果没有,你可以像我上面那样缓存引用。