javascript - a标签绑定onclick事件,取不到$(this)

查看:235
本文介绍了javascript - a标签绑定onclick事件,取不到$(this)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

<a class="no-config" onclick="modifyNameA();">A标签</a>

function modifyNameA() {
    if (openFlag == 'm') {
        $(this).hide();
        $(this).siblings('input').show().focus();
    }
}

A绑定了modifyNameA()事件后,在事件中使用$(this),取不到这个a元素,请问原因与解决办法。

解决方案

不建议使用 onclick 之类的属性绑定事件监听,你现在遇到的问题就是问题之一。

如果使用 onclick 属性绑定事件,实际上相当于下面的代码:

function mondifyNameA () {
...
}

var a = document.querySelector('.no-config');
a.onclick = function () {
  eval('modifyNameA()');
};

这样能看出为什么 modifyNameA() 中获取到的 this 是错误的了吧?因为 this 指向了 window 对象。所以上面的朋友给的建议是 :

<a class="no-config" onclick="modifyNameA(this);">A标签</a>

再修改modifyNameA()方法接收一个参数,这样上面的代码就变成了:

function mondifyNameA (ele) {
...
}

var a = document.querySelector('.no-config');
a.onclick = function () {
  eval('modifyNameA(this)');
};

这样就可以在 modifyNameA() 方法中通过参数获取到标签了,但这样的修改 this 指向的还是 window 对象。实际上只是解决了如何获取标签的问题,并没有解决 this 指向的问题。那有没有办法使用 this 正确获取到标签呢?如果理解了上面的代码,其实是有方法的,如 :

<a class="no-config" onclick="modifyNameA.call(this)">A标签</a>

我在想你都使用了 jQuery 了,为什么还用属性绑定事件而不使用 jQuery 的 onclick() 或 bind() 之类的方法,那你就不会遇到现在的问题了。

这篇关于javascript - a标签绑定onclick事件,取不到$(this)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆