Add events, prevent event propagation, and delete events on the page

Source: Internet
Author: User

1. Add events

Method 1: embed the event script in XHTML directly ('clicked' is displayed ')

<input type="button" onclick="alert('clicked');" value="click me"/>

Method 2: Separate the event script from the function ('clicked' pops up ')

<input type="button" onclick="clickEvent();" value="click me" /><script type="text/javascript">    function clickEvent() {        alert("clicked");    }</script>

Method 3: The behavior structure is completely separated ('clicked again 'pops up and only the last Bound event is executed). This method allows only one processor for the same event of an element, it is executed only once.

<input type="button" id="Example" value="click me" /><script type="text/javascript">    var btn = document.getElementById("Example");    btn.onclick = function () {        alert("clicked");    };    btn.onclick = function () {        alert("clicked again");    };</script>

Method 4: Listen to events (IE6, IE7, and IE8), pop up 'clicked again 'and 'clicked' in sequence, and pop up 'clicked' and 'clicked again' in other browsers in sequence '), the reason is that the W3C standard addeventlistener method executes events in the order of event registration. The attachevent method of IE is the opposite. Events registered after the registration are first published, and events registered before the registration are triggered.

<input type="button" id="Example" value="click me" /><script type="text/javascript">    function addEvent(eventTarget, eventType, evrntHandler) {        if (eventTarget.addEventListener) {            eventTarget.addEventListener(eventType, evrntHandler, false);        }        else if (eventTarget.attachEvent) {            eventType = "on" + eventType;            eventTarget.attachEvent(eventType, evrntHandler)        }        else { eventTarget["on" + eventType] = evrntHandler; }    }    var btn = document.getElementById("Example");    addEvent(btn, "click", function () {        alert("clicked");    });    addEvent(btn, "click", function () {        alert("clicked again");    });</script>

In summary, Method 4 is the best choice for adding events.

2. Prevent event bubbles

Events will be transmitted in nested functions. In the following code, click inner, and pop up 'inner ', 'middle', and 'out'. Then click middle, in turn, click 'ddle' and 'out', and then 'out. The third parameter of the addeventlistener (event, function, capture/bubble) function: True indicates the capture stage, and false indicates the bubble stage. To be compatible with IE event processing, set it to false. If the third parameter is set to true, in the standard browser, click inner, pop up 'out', 'middle', and 'inner 'in sequence '.

<script type="text/javascript">    function addEvent(eventTarget, eventType, evrntHandler) {        if (eventTarget.addEventListener) {            eventTarget.addEventListener(eventType, evrntHandler, false);        }        else if (eventTarget.attachEvent) {            eventType = "on" + eventType;            eventTarget.attachEvent(eventType, evrntHandler)        }        else { eventTarget["on" + eventType] = evrntHandler; }    }    addEvent(window, "load", function () {        var out = document.getElementById("out");        var middle = document.getElementById("middle");        var inner = document.getElementById("inner");        addEvent(out, "click", function () { alert("out") })        addEvent(middle, "click", function () { alert("middle") })        addEvent(inner, "click", function () { alert("inner") })    });</script><div style="padding:20px;background:red" id="out">    <div style="padding:20px;background:green" id="middle">        <div style="padding:20px;background:white" id="inner">        </div>    </div></div>

How to Prevent event Propagation? The following code can solve the problem. Click inner to bring up 'inner '. Click middle to bring up 'middle'. Click out to bring up 'out'

<script type="text/javascript">    function addEvent(eventTarget, eventType, evrntHandler) {        if (eventTarget.addEventListener) {            eventTarget.addEventListener(eventType, evrntHandler, false);        }        else if (eventTarget.attachEvent) {            eventType = "on" + eventType;            eventTarget.attachEvent(eventType, evrntHandler)        }        else { eventTarget["on" + eventType] = evrntHandler; }    }    function cancelPropagation(event) {        event = window.event || event;        if (document.all) {            event.cancelBubble = true;        } else {            event.stopPropagation();        }    }    addEvent(window, "load", function () {        var out = document.getElementById("out");        var middle = document.getElementById("middle");        var inner = document.getElementById("inner");        addEvent(out, "click", function () { alert("out") })        addEvent(middle, "click", function (evt) {            alert("middle");            cancelPropagation(evt);        });        addEvent(inner,"click",function(evt){            alert("inner");            cancelPropagation(evt);        });    });</script><div style="padding:20px;background:red" id="out">    <div style="padding:20px;background:green" id="middle">        <div style="padding:20px;background:white" id="inner">        </div>    </div></div>

If you want to release the binding event, use the following code.

<script type="text/javascript">    function addEvent(eventTarget, eventType, evrntHandler) {        if (eventTarget.addEventListener) {            eventTarget.addEventListener(eventType, evrntHandler, false);        }        else if (eventTarget.attachEvent) {            eventType = "on" + eventType;            eventTarget.attachEvent(eventType, evrntHandler)        }        else { eventTarget["on" + eventType] = evrntHandler; }    }    function removeEvent(eventTarget, eventType, evrntHandler) {        if (eventTarget.removeEventListener) {            eventTarget.removeEventListener(eventType, evrntHandler, false);         }        else if (eventTarget.detachEvent) {            eventType = "on" + eventType;            eventTarget.detachEvent(eventType, evrntHandler)         }        else { eventTarget["on" + eventType] = null; }     }    addEvent(window, "load", function () {        var ok = document.getElementById("ok");        var switchBtn = document.getElementById("switchBtn");        var flag = true;        addEvent(switchBtn, "click", function () {            if (flag) {                addEvent(ok, "click", show);                switchBtn.value = "removeEvent";                flag = false;            }            else {                removeEvent(ok, "click", show);                switchBtn.value = "addEvent";                flag = true;             }        });    });    function show() {        alert("I am here");    }</script><input type="button" value="addEvent" id="switchBtn" /><input type="button" value="Try to click me^_^" id="ok" />

 

 

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.