JS onclick调用函数能否不传id、不用querySelector传入当前元素innerHTML
问题解答
完全可以实现,无需给按钮设置id,也无需调用querySelector等DOM查询方法,500个按钮不需要配置任何冗余的唯一标识。
方案1:适配现有内联事件写法,改动最小
HTML内联事件的执行上下文默认将this绑定为当前绑定事件的DOM元素,你只需要把原有onclick属性里的参数替换为this.innerHTML,点击时就会自动把当前按钮的innerHTML作为参数传入目标函数。
修改后的按钮代码:
<button onclick="myFunction(this.innerHTML)">Name XY</button>
所有按钮统一按这个格式写即可,点击不同按钮会自动传入对应按钮的内容,不需要额外做DOM查询。
对应的业务函数正常接收字符串参数即可,不需要特殊改造:
function myFunction(btnInnerContent) { // 此处编写你的业务逻辑,btnInnerContent就是点击按钮的innerHTML值 console.log('当前点击按钮内容:', btnInnerContent) }
方案2:事件委托批量绑定,无需给按钮加事件属性
如果不想给每个按钮手动写onclick属性,可以用事件委托实现一次绑定全局生效,同样不需要给按钮设id、不需要单独查询按钮元素:
- 把点击事件绑定到所有按钮的公共祖先节点(比如
document即可,不需要额外查特定父元素) - 点击触发时判断事件源是按钮元素,直接读取事件源的innerHTML传入函数即可
绑定代码只需要写一次:
document.addEventListener('click', function(e) { // 匹配点击目标为按钮元素时执行逻辑 if (e.target.tagName.toLowerCase() === 'button') { myFunction(e.target.innerHTML) } })
这种写法下按钮不需要加任何额外属性,直接写基础标签即可,后续动态新增的按钮也能自动响应点击:
<button>Name XY</button> <button>Name AB</button> <!-- 其余498个按钮直接按普通按钮写法编写即可,不需要加id、不需要加事件属性 -->
内容的提问来源于stack exchange,提问作者Alex Kröker
相关产品推荐
相关产品推荐

