使用$(this)从ajaxform插件构造函数中选择标记

时间:2013-12-24 22:38:34

标签: jquery jquery-selectors ajaxform

注意:如果你理解我的问题,我的标题非常糟糕,请帮助我改进它

我正在使用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)时才能成功完成上述操作,但是当我在页面中有多个表单时会出现问题

2 个答案:

答案 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....)

希望调用成功处理程序的上下文是表单节点本身,如果没有,你可以像我上面那样缓存引用。