使用原生 js 编写组件时遇到了这个问题,记录一下。

问题描述

有一个函数 a() , 我希望在点击的时候调用,a() 函数需要的参数除了触发点击的事件外,还需要一个额外的对象 obj。

为元素添加监听器,可以这么写:

document.getElementById('test').addEventListener('click',a)

但是,问题就出现了,事件触发时只会把事件作为第一个参数传入 a() 函数中,obj 不是个全局变量,怎么把 obj 传入 a() 中呢?

解决方法

使用闭包就可以解决这个问题

假设 a()函数是这样的,除了事件对象外,我们还需要一个 obj 对象

function a(e, obj){console.log(obj);
}

直接将 a() 函数绑定到事件上,肯定是无法获得 obj 的,我们可以将这个函数包装一下

function fn(obj){function a(){console.log(obj);}return a;
}
document.getElementById('test').addEventListener('click',fn('测试'))

通过外层的 fn() 函数,返回了函数 a() , 真正绑定上去的是这个返回的函数。而传入的 obj 在 fn() 的作用域中,a() 作为 fn() 的内部函数,也可以访问到这个对象,这个问题就解决了。

js 事件绑定传入自定义参数相关推荐

  1. html click事件 参数,vue 实现click同时传入事件对象和自定义参数

    这篇文章主要介绍了vue 实现click同时传入事件对象和自定义参数,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 仅仅传入自定义参数 HTML ddddd JS代码 new Vue ...

  2. vue click同时传入事件对象和自定义参数

    仅仅传入自定义参数 HTML <div id="app"><button @click="tm(123)">ddddd</butt ...

  3. 原生JS事件绑定的三种方式

    JavaScript绑定事件的方法 要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定"事件处理函数".所谓事件处理函数,就是处理用户操作的函数,不同的 ...

  4. Python scrapy 动态传入自定义参数

    本文仅供学习交流使用,如侵立删!demo下载见文末 动态传递自定义参数启动 def run(model_id):# 启动爬虫 car_images_spider是爬虫脚本文件名:spiders/car ...

  5. 关于事件模型,js事件绑定和解除的学习

    http://www.cnblogs.com/iyangyuan/p/4190773.html 原文的例子通俗易懂,很适合学习.主要讲了dom0和dom2的事件模型,以及捕获和冒泡,事件绑定和解除事件 ...

  6. JavaScript解除事件绑定处理程序 js事件绑定解除

    //参考 https://mp.csdn.net/postedit/90524536 JavaScript 事件绑定 封装一个兼容性事件绑定方法应需求有时候事件绑定触发后就要接触事件. 解除事件绑定方 ...

  7. 原生js事件绑定和事件移除

    /*** @description 事件绑定,兼容各浏览器* @param target 事件触发对象 * @param type 事件* @param func 事件处理函数*/ function ...

  8. JS事件绑定的几种方式

    一.有几种常用的: 在JavaScript中,有三种常用的绑定事件的方法: 1.在DOM元素中直接绑定. 2.在JavaScript代码中绑定. 3.绑定事件监听函数. 二.具体分析: 1.在DOM元 ...

  9. js事件Event对象(自定义事件对象 CustomEvent)

    文章目录 一.参考 二.Event 接口介绍 2.1 事件分类 三. 创建过时Event不推荐 3.1 document.createEvent 3.1.1 语法`var event = docume ...

最新文章

  1. python自动生成鸡汤文_20行python代码实现鸡汤智能生成器
  2. 关于如何修改Redmine系统中的字段问题解答
  3. linux删除文件退出,在Linux中用于在移动或删除文件时使`tail -f`退出的bash脚本
  4. Yslow-23条规则
  5. 移动端点击保存图片_财经理财新闻资讯类网站织梦模板(带手机端)
  6. CString to LPWSTR
  7. 【vscode】去除黄色波浪下划线
  8. Stanford机器学习---第4讲. 神经网络的表示 Neural Networks representation
  9. 考研心得--一个差劲的ACMer
  10. 小仲马《茶花女》读后感
  11. Kinect的Kinect Manager脚本简介
  12. C盘清理(主要的大文件清理)
  13. LRC歌词制作LRC歌词制作
  14. app图标icon大全
  15. 【ChatGPT】从零开始构建基于ChatGPT的嵌入式(Embedding) 本地(Local) 智能客服问答机器人模型
  16. 以太坊转账参数java_【ETH钱包开发04】web3j转账ERC-20 Token
  17. 笔记2 IKAnalyzer扩展词库
  18. Tableau Desktop 2020 Mac支持M1芯片下载big sur 解决M1芯片安装Tableau Public教程2021
  19. 机器视觉光源选型总结---颜色选择
  20. Erika企业版实时操作系统

热门文章

  1. 哪款蓝牙耳机性价比高?双十一蓝牙耳机推荐
  2. ArcGIS ArcMap “ Add Data” 打开后,一直卡死,无内容
  3. 英译汉文章在线翻译器:批量翻译、素材收集、图片处理
  4. 王慧文的光年之外离OpenAI还有多远?
  5. Java 中的判空操作
  6. 橙单微服务的权限部分
  7. 水晶报表10的下载地址及注册码
  8. java进度条_Java web实时进度条整个系统共用(如java上传、下载进度条、导入、导出excel进度条等)...
  9. Vue知识点总结(16)——具名插槽(超级详细)
  10. “给在读研究生+未来要读研同学们的一封受益匪浅的信”(摘录+整合)