jQuery技术:$(this)对象在jquery post()后变为未定义

在我的网站的登录页面上,我有两个相同的登录表单。 一个在页面的主体中,第二个被加载到标题中的Login链接的jquery对话框中。 我已经删除了所有相同的ID并使用了类。

我想要做的是:在用户单击对话框中的提交后,我试图将错误消息放入正确的DIV中,但是在jquery post()或ajax调用之后我得到$(this)未定义。

 $('.login-submit').live('click', function(){ alert($(this).attr('class')); // THIS WORKS var form = $(this).parent('form').get(0); var values = $(this).parent('form').serialize(); $.post('/users/login',values,function(data){ if(!data['success']) { alert($(this).attr('class')); // THIS SAYS UNDEFINED // TRYING TO DO THIS $(this).siblings('.form-error').html(data['error']); } },'json'); }); 

这是HTML:

  

    回调在不同的上下文中执行。

    您需要将外部保存在变量中,以便可以在内部函数中使用它。

    在您的示例中,这是指匿名函数。 试试这个:

     $('.login-submit').live('click', function(){ var that = this; alert($(this).attr('class')); // THIS WORKS var form = $(this).parent('form').get(0); var values = $(this).parent('form').serialize(); $.post('/users/login',values,function(data){ if(!data['success']) { alert($(that).attr('class')); // THIS SAYS UNDEFINED // TRYING TO DO THIS $(that).siblings('.form-error').html(data['error']); } },'json'); }); 

    然后,您的函数将在其执行范围内具有此function,但它将存储在该变量中。

    这是因为Javascript闭包 – 在每个新函数的范围内重新定义了“this”。

    需要了解更多jQuery教程分享$(this)对象在jquery post()后变为未定义,都可以关注jQuery技术分享栏目—计算机技术网(www.ctvol.com)!

     $('.login-submit').live('click', function(){ alert($(this).attr('class')); // THIS WORKS var form = $(this).parent('form').get(0); var values = $(this).parent('form').serialize(); var me = $(this); $.post('/users/login',values,function(data){ if(!data['success']) { me.siblings('.form-error').html(data['error']); } }, 'json'); }); 

      以上就是jQuery教程分享$(this)对象在jquery post()后变为未定义相关内容,想了解更多jQuery开发(异常处理)及jQuery教程关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/jquerytutorial/981374.html

      (0)
      上一篇 2021年12月12日
      下一篇 2021年12月12日

      精彩推荐