使用jquery模拟a标签的click事件无法实现跳转的解决


Posted in jQuery onDecember 04, 2018

问题描述

最近在使用jquery模拟a标签的click事件,无法触发其默认行为。即click()trigger('click')无法触发href跳转。

<a id="aBtn" href="https://www.car-me.com/">去卡咪官网</a>
$('#aBtn').click();//无法跳转,不生效
$('$aBtn').trigger('click');//同样无法跳转,不生效

下面就来一起分析下其原因与解决方法吧

问题原因

jquery内部实现click或trigger方法时,并未真正模拟用户点击事件,只是模拟了事件对象及冒泡的触发。(最后附有jquery实现源码供参考)

解决方案

解决思路:在原生dom触发click事件或利用事件冒泡来解决。

原生dom触发click

<a id="aBtn" href="https://www.car-me.com/">去卡咪官网</a>
document.querySelector('#aBtn').click();//原生dom触发 或者
$('#aBtn')[0].click();//jquery对象转为dom对象再触发

利用子元素事件冒泡

<a id="aBtn" href="https://www.car-me.com/">
 <span id="spanBtn">去卡咪官网</span>
</a>
$('#spanBtn').click();//或者
$('#spanBtn').trigger('click');

jquery trigger()实现源码(8159行-8304行)

源码链接地址

关键摘要:

// Fire handlers on the event path (8237行)
i = 0;
while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
	lastElement = cur;
	event.type = i > 1 ?
		bubbleType :
		special.bindType || type;

	// jQuery handler
	handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
		dataPriv.get( cur, "handle" );
	if ( handle ) {
	//******自身trigger('click')或click()时,会调用缓存列表里的事件回调函数,但未执行elem.click()******
		handle.apply( cur, data );
	}

	// Native handler
	handle = ontype && cur[ ontype ];
	if ( handle && handle.apply && acceptData( cur ) ) {
		event.result = handle.apply( cur, data );
		if ( event.result === false ) {
			event.preventDefault();
		}
	}
}
// If nobody prevented the default action, do it now (8263行)
if ( !onlyHandlers && !event.isDefaultPrevented() ) {

	if ( ( !special._default ||
		special._default.apply( eventPath.pop(), data ) === false ) &&
		acceptData( elem ) ) {

		// Call a native DOM method on the target with the same name as the event.
		// Don't do default actions on window, that's where global variables be (#6170)
		if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {

			// Don't re-trigger an onFOO event when we call its FOO() method
			tmp = elem[ ontype ];

			if ( tmp ) {
				elem[ ontype ] = null;
			}

			// Prevent re-triggering of the same event, since we already bubbled it above
			jQuery.event.triggered = type;

			if ( event.isPropagationStopped() ) {
				lastElement.addEventListener( type, stopPropagationCallback );
			}
   //******子元素trigger('click')或click(),会执行elem.click()******
			elem[ type ]();

			if ( event.isPropagationStopped() ) {
				lastElement.removeEventListener( type, stopPropagationCallback );
			}

			jQuery.event.triggered = undefined;

			if ( tmp ) {
				elem[ ontype ] = tmp;
			}
		}
	}
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

jQuery 相关文章推荐
jQuery插件FusionCharts实现的MSBar2D图效果示例【附demo源码】
Mar 24 jQuery
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
Aug 09 jQuery
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
Oct 19 jQuery
jQuery动态移除与增加onclick属性的方法详解
Jun 07 jQuery
jquery.param()实现数组或对象的序列化方法
Oct 08 jQuery
jQuery实现王者荣耀手风琴效果
Jan 17 jQuery
jQuery实现简易聊天框
Feb 08 jQuery
jQuery--遍历操作实例小结【后代、同胞及过滤】
May 22 jQuery
jQuery使用jsonp实现百度搜索的示例代码
Jul 08 jQuery
JavaScript枚举选择jquery插件代码实例
Nov 17 jQuery
jQuery冲突问题解决方法
Jan 19 jQuery
jQuery利用FormData上传文件实现批量上传
Dec 04 #jQuery
利用jquery和BootStrap实现动态滚动条效果
Dec 03 #jQuery
jQuery-ui插件sortable实现自由拖动排序
Dec 01 #jQuery
jquery拖拽自动排序插件使用方法详解
Jul 20 #jQuery
jQuery实现网页拼图游戏
Apr 22 #jQuery
基于jquery实现九宫格拼图小游戏
Nov 30 #jQuery
jQuery实现购物车的总价计算和总价传值功能
Nov 28 #jQuery
You might like
虹吸壶煮咖啡26个注意事项
2021/03/03 冲泡冲煮
PHP引用返回用法示例
2016/05/28 PHP
基于PHP实现栈数据结构和括号匹配算法示例
2017/08/10 PHP
Laravel 读取 config 下的数据方法
2019/10/13 PHP
PHP 实现 JSON 数据的编码和解码操作详解
2020/04/22 PHP
php提高脚本性能的4个技巧
2020/08/18 PHP
javascript:void(0)是什么意思示例介绍
2013/11/17 Javascript
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
href下载文件根据id取url并下载
2014/05/28 Javascript
js控制div弹出层实现方法
2015/05/11 Javascript
深入理解ECMAScript的几个关键语句
2016/06/01 Javascript
利用js编写响应式侧边栏
2016/09/17 Javascript
Node.js包管理器Yarn的入门介绍与安装
2016/10/17 Javascript
jQuery实现发送验证码并60秒倒计时功能
2016/11/25 Javascript
自动适应iframe右边的高度
2016/12/22 Javascript
Javascript 使用ajax与C#获取文件大小实例详解
2017/01/13 Javascript
详解微信小程序Radio选中样式切换
2017/07/06 Javascript
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
如何以Angular的姿势打开Font-Awesome详解
2018/04/22 Javascript
[10:42]Team Liquid Vs Newbee
2018/06/07 DOTA
python根据出生年份简单计算生肖的方法
2015/03/27 Python
使用70行Python代码实现一个递归下降解析器的教程
2015/04/17 Python
20招让你的Python飞起来!
2016/09/27 Python
tensorflow使用神经网络实现mnist分类
2018/09/08 Python
selenium python 实现基本自动化测试的示例代码
2019/02/25 Python
python如何解析配置文件并应用到项目中
2019/06/27 Python
使用Python制作一个打字训练小工具
2019/10/01 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
玖熙女鞋美国官网:Nine West
2016/10/06 全球购物
行政人事专员岗位职责
2014/03/05 职场文书
暑假家长评语大全
2014/04/17 职场文书
客服专员岗位职责
2015/02/10 职场文书
2015年大班保育员工作总结
2015/05/18 职场文书
重温入党誓词主持词
2015/06/29 职场文书
幼儿园亲子活动感想
2015/08/07 职场文书
Windows10安装Apache2.4的方法步骤
2022/06/25 Servers