简体   繁体   中英

I need to detect focus event on all HTML input elements on page without addEventListener and without HTML attribute

I need to detect focus event on all HTML input elements on the page without using addEventListener and without HTML attributes

I was able to do that with the click event by:

onclick = () => { 
  // do something
}  

But when i do like that for onfocus it just fires when the focus occurs in the document itself.

Is there a way I could to it the same way for onfocus and onchange on input and select elements, respectively?

EDIT

The reason why i can't use the HTML attributes it's because it will be on a static script that will load through a CDN in the page. Thus, i do not have access to the HTML code itself and i can't use the HTML attributes .

About the addEventListener , I don't want use for performance issues, because i would have to loop for every elements and it would be costly for some browsers and devices memories

Furthermore, if the element on pages change dynamically, like in a SPA, i would have to listen to this change and loop through all of them again, which would cause performance issues .

A simple idea using delegated listeners attached to the document.

 document.addEventListener("click", (e) => { console.log("You clicked on " + e.target.nodeName); }, true); document.addEventListener("focus", (e) => { console.log(e.target.nodeName + " (" + e.target.name + ") has focus"); }, true); document.addEventListener("blur", (e) => { console.log(e.target.nodeName + " (" + e.target.name + ") lost focus"); }, true);
 .red { background-color: red; }
 <div class='red'> <p>some text</p> <input type='text' name='username'> </div>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM