jquery click()执行a标签默认点击事件不生效。

来看一下代码。

<a href="http://www.baidu.com" id="aa">跳转到百度</a>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script>
    setTimeout(() => {
        $('#aa').click();
    }, 3000);
</script>

很意外,没执行。我们来看一下jq源码。

click: {
	// For checkbox, fire native event so checked state will be right
	trigger: function() {
		if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) {
			this.click();
			return false;
		}
	},
	// For cross-browser consistency, don't fire native .click() on links
	_default: function( event ) {
		return nodeName( event.target, "a" );
	}
}	
/*
*该方法用来判断elem是不是指定的标签元素name。
*/
function nodeName( elem, name ) {
  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
};

通过阅读源码发现jq对a标签的click方法没有做处理,

下面我们来修改一下jq源码验证一下。

_default: function( event ) {
	return false  //不验证任何标签,都执行click回调。
}

刷新页面是不是执行了。
但是这种方式是不推荐的,不建议修改第三方库的源码。(如果你对源码很熟悉或是不担心修改会带来其他问题当我没说哈!)

推荐方式一:
document.getElementById(‘elemId’).click();
推荐方式二:
$(’#elemId’)[0].click();
是不是感觉方式一和方式二是一样的,没错,就是直接执行dom元素的click方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值