来看一下代码。
<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方法。