Home >Web Front-end >JS Tutorial >What are the ways to bind events in javascript
Binding method: 1. Use the "onclick" attribute directly in the tag to bind the event; 2. Use the "object.onclick=function(){event}" statement to bind the event; 3. Use the "object .attachEvent('click',function(){event})" statement binds the event.
The operating environment of this tutorial: windows7 system, javascript version 1.8.5, Dell G3 computer.
How to bind events in javascript
First of all, let me introduce the three methods we usually use to bind events.
1. Bind events directly in tags
<button onclick="open()">按钮</button> <script> function open(){ alert(1) } </script>
2. Use JavaScript objects to bind events
<button id="btn">按钮</button> <script> document.getElementById('btn').onclick = function(){ alert(1) } </script>
3.Event monitoring
<button id="btn">按钮</button> <script> document.getElementById('btn').addEventListener('click',function(){ alert(1) }) //兼容IE document.getElementById('btn').attachEvent('click',function(){ alert(1) }) </script>
Extended information:Event delegation
Response to "Too many event handlers" The solution to the problem is event delegation. Event delegation takes advantage of event bubbling, and only one event handler can be developed to manage all events of a certain type. For example, click events always bubble up to the document layer. That is, we can only specify the onclick event handler instead of adding handlers to each event separately.Let’s look at an example of Alibaba’s written test questions.
Style and DOM structure
<style> * { padding: 0; margin: 0; } .head, li div { display: inline-block; width: 70px; text-align: center; } li .id, li .sex, .id, .sex { width: 15px; } li .name, .name { width: 40px; } li .tel, .tel { width: 90px; } li .del, .del { width: 15px; } ul { list-style: none; } .user-delete { cursor: pointer; } </style> </head> <body> <div id="J_container"> <div class="record-head"> <div class="head id">序号</div><div class="head name">姓名</div><div class="head sex">性别</div><div class="head tel">电话号码</div><div class="head province">省份</div><div class="head">操作</div> </div> <ul id="J_List"> <li><div class="id">1</div><div class="name">张三</div><div class="sex">男</div><div class="tel">13788888888</div><div class="province">浙江</div><div class="user-delete">删除</div></li> <li><div class="id">2</div><div class="name">李四</div><div class="sex">女</div><div class="tel">13788887777</div><div class="province">四川</div><div class="user-delete">删除</div></li> <li><div class="id">3</div><div class="name">王二</div><div class="sex">男</div><div class="tel">13788889999</div><div class="province">广东</div><div class="user-delete">删除</div></li> </ul> </div> </body>**No event delegation is required. **The cost of this method is a large waste of performance. If there are thousands of pieces of data, the page will be severely stuck or even crash.
function Contact(){ this.init(); } Contact.prototype.init = function(){ var userdel = document.querySelectorAll('.user-delete'); for(var i=0;i<lis.length;i++){ (function(j){ userdel[j].onclick = function(){ userdel[j].parentNode.parentNode.removeChild(userdel[j].parentNode); } })(i); } } new Contact();Use event delegation and only bind the event once, which greatly reduces performance loss. It is also a very good solution when a large number of event handlers are required.
function Contact(){ this.init(); } Contact.prototype.init = function(){ var lis = document.querySelector('#J_List'); lis.addEventListener('click', function(e){ var target = e.target || e.srcElement; if (!!target && target.className.toLowerCase()==='user-delete') { } }) } new Contact();【Related recommendations: javascript learning tutorial】###
The above is the detailed content of What are the ways to bind events in javascript. For more information, please follow other related articles on the PHP Chinese website!