在我的网站的登录页面上,我有两个相同的登录表单。 一个在页面的主体中,第二个被加载到标题中的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