使用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插件Echarts实现的渐变色柱状图
Mar 23 jQuery
jquery实现图片上传前本地预览
Apr 28 jQuery
jQuery返回定位插件详解
May 15 jQuery
vue单页应用中如何使用jquery的方法示例
Jul 27 jQuery
jQuery实现手势解锁密码特效
Aug 14 jQuery
关于JS与jQuery中的文档加载问题
Aug 22 jQuery
jQuery实现可兼容IE6的滚动监听功能
Sep 20 jQuery
jquery在启动页面时,自动加载数据的实例
Jan 22 jQuery
JQuery Ajax执行跨域请求数据的解决方案
Dec 10 jQuery
jQuery实现的记住帐号密码功能完整示例
Aug 03 jQuery
jQuery 图片查看器插件 Viewer.js用法简单示例
Apr 04 jQuery
jquery html添加元素/删除元素操作实例详解
May 20 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
PHP+JS无限级可伸缩菜单详解(简单易懂)
2007/01/02 PHP
PHP制作万年历
2015/01/07 PHP
CI框架常用方法小结
2016/05/17 PHP
PHP实现截取中文字符串不出现?号的解决方法
2016/12/29 PHP
Yii2框架加载css和js文件的方法分析
2019/05/25 PHP
json 定义
2008/06/10 Javascript
jMessageBox 基于jQuery的窗口插件
2009/12/09 Javascript
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
JavaScript 产生不重复的随机数三种实现思路
2012/12/13 Javascript
Javascript闭包(Closure)详解
2015/05/05 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
2016/06/14 Javascript
浅谈vue引用静态资源需要注意的事项
2018/09/28 Javascript
Vue.js实现大屏数字滚动翻转效果
2019/11/29 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
Javascript地址引用代码实例解析
2020/02/25 Javascript
Vue 列表页带参数进详情页的操作(router-link)
2020/11/13 Javascript
Python处理json字符串转化为字典的简单实现
2016/07/07 Python
Django中cookie的基本使用方法示例
2018/02/03 Python
python 将print输出的内容保存到txt文件中
2018/07/17 Python
Python判断以什么结尾以什么开头的实例
2018/10/27 Python
OpenCV+python实现实时目标检测功能
2020/06/24 Python
python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境
2020/12/14 Python
美国最古老的精致书写工具制造商:A.T. Cross(高仕)
2018/01/30 全球购物
PPP协议组成及简述协议协商的基本过程
2015/05/28 面试题
美术教师自我鉴定
2014/02/12 职场文书
英文求职信写作小建议
2014/02/16 职场文书
母亲节演讲稿
2014/05/27 职场文书
销售顾问工作计划书
2014/09/15 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
庆六一开幕词
2015/01/29 职场文书
员工拾金不昧表扬稿
2015/05/05 职场文书
2015年学校禁毒工作总结
2015/05/27 职场文书
肖申克的救赎观后感
2015/06/02 职场文书
2016年优秀团支部事迹材料
2016/02/26 职场文书
使用tensorflow 实现反向传播求导
2021/05/26 Python