This in the execution functions bound by addEventListener and attachEvent is different.

Source: Internet
Author: User

There are many blog posts about the differences between addEventListener and attachEvent, but most of them focus on Firefox chrome, and the latter only exists in the IE series.

Recently, when I was writing an event proxy, I encountered a BUG and found that, apart from this, the execution functions bound to the two are different, the running context of the addEventListener and attachEvent functions is different.
A simple demo is used to describe the difference:
Copy codeThe Code is as follows:
<Html xmlns = "http://www.w3.org/1999/xhtml">
<Head>
<Meta http-equiv = "Content-Type" content = "text/html; charset = UTF-8"/>
<Title> test </title>
</Head>
<Body>
<Div id = "div1">
<A href = "#" id = "a1"> test1 </a>
</Div>
<Div id = "div2">
<A href = "#" id = "a2"> test2 </a>
</Div>
</Body>
<Script type = "text/javascript">
Var testGolb = "diff"; // defines a global variable.
Var a1 = document. getElementById ("a1 ");
Var a2 = document. getElementById ("a2 ");
Function getEleId (e ){
// Body...
Alert (this. id );
Alert (this. testGolb );
}
A1.onclick = getEleId;
If (a2.attachEvent ){
A2.attachEvent ("onclick", getEleId );
} Else {
A2.addEventListener ('click', getEleId );
}
</Script>
</Html>

Click test1
The first alert in chrome: "a1", the second alert: "undefined"
The first alert in firefox: "a1", the second alert: "undefined"
The first alert in IE: "a1", the second alert: "undefined"
This is easy to understand. At this time, this points to the # a1 DOM, so alert id is # a1's id "a1". Then in this, there is no testGolb variable, so it is undefined.
Click test2
The first alert in chrome: "a1", the second alert: "undefined"
The first alert in firefox: "a1", the second alert: "undefined"
The first alert in IE: "undefined", the second alert: "diff"

Chrome and firefox are consistent with test1, While IE is different. When binding an event using attachEvent, this in the function points to the window instead of the event dom. Therefore, the first alert value is undefined, and the value of this. testGlob is diff.

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.