zoukankan      html  css  js  c++  java
  • 事件对象

    1.event对象

    document.onmouseup = function(evt){

    var e = evt || window.event      // 这里是为了兼容w3c和IE,因为ie有自己自定义的event

    }

    2.鼠标左中右键

    1.event.button 

    window.onload = function() {
            document.onmousedown= function(event) {
                if (getButton(event) == 0) alert('左键');
                if (getButton(event) == 1) alert('中键');
                if (getButton(event) == 2) alert('右键');
            }       
        }
        function getButton(event) {
            var e = event || window.event;
            if (event) {
                return e.button;
            } else if (window.event) {   // IE
                switch (e.button) {
                    case 1:
                        return 0;
                    case 4:
                        return 1;
                    case 0:   // 360
                        return 2
                }
            }
        }

    2.键盘事件

    keydown:  按下任意键立即触发

    keyup:  弹起任意键立即触发

    keypress:  按下字符键触发(1,2,3,a,b,c等等)

    keycode:  键盘上的任意键,返回的是ASCLL的小写字母

    charcode: 只有在发生keypress事件的时候才包含值,返回的是那个键所代表的字符的ASCLL编码

    3.冒泡

    <body>
    <div id="box">
        <input type="" name="" value="按钮">
    </div>
        <script type="text/javascript">
        document.onclick = function(){
            alert('document');
        }
        document.body.onclick = function(){
            alert('body');
        }
        document.getElementById('box').onclick = function(){
            alert('div');
        }
        document.getElementsByTagName('input')[0].onclick = function(event){
            var e = event || window.event; 
    
            alert('input');
            e.stopPropagation();  // W3C取消冒泡
            e.cancelBubble = true;   // IE取消冒泡方式
        }
        </script>
    </body>

     4.检查入口函数是否重复

    alert(window.onload)

    5.w3c事件处理函数

     1.addEventListener(method,function,bool)   bool为false时为捕获,true时为冒泡

    2.removeEventListener(method,function,bool)

    3.相同函数屏蔽问题

    <!DOCTYPE html>
    <html>
    
    <head>
        <title>fdfda</title>
        <meta charset="utf-8">
    </head>
    
    <body>
    <div id="box">
        <input type="" name="" value="¹þ¹þ">
    </div>
        <script type="text/javascript">
        window.onload = function(){
            window.addEventListener('click',init,false);
            window.addEventListener('click',init,false);
            window.addEventListener('click',init,false);
        }
        function init(){
            alert('hahah');   // 只弹出一次
        }

    4.切换

    <div id="box">ggggg</div>
        <script type="text/javascript">
        window.addEventListener('load',function(){
            var box = document.getElementById('box');
            box.addEventListener('click',change1,false)
        },false)
        function change1(){       
            this.innerHTML = '哈哈哈哈';
            this.addEventListener('click',change2,false);
            this.removeEventListener('click',change1,false);
        }
        function change2(){
            this.innerHTML = '嘻嘻嘻嘻';
            this.addEventListener('click',change1,false);
            this.removeEventListener('click',change2,false);
        }
        </script>

    6.IE事件的处理函数

    1.attachEvent(method,function),  detachEvent(method,function)

    注意: IE不支持捕获,只支持冒泡,IE添加时间不能屏蔽重复的函数,IE中的this指向的是window而不是dom对象,在传统时间上,IE是无法接收到event对象的,但使用了attachEvent却可以,但有些区别

    <!DOCTYPE html>
    <html>
    
    <head>
        <title>fdfda</title>
        <meta charset="utf-8">
    </head>
    
    <body>
    <div id="box">
        <input type="" name="" value="¹þ¹þ">
    </div>
        <script type="text/javascript">
        window.onload = function(){
            window.addEventListener('click',init,false);
            window.addEventListener('click',init,false);
        }
        function init(){
            alert('hahah');  // 弹出两次,无法屏蔽
        }
    // 在IE中
    window.attachEvent('onload',function(){ var box = document.getElementById('box'); box.attachEvent('onclick',function(){ // alert(this === box) // 返回false alert(this === window) // 返回true // ps: 可以用call()把this对象传过去 }) })

    7.跨浏览器添加事件和移除事件

    <div id="box">ggggg</div>
        <script type="text/javascript">
        // 添加事件
        function addEvent(obj,type,fn){
            if(obj.addEventListener){
                obj.addEventListener(type,fn,false)
            }else if(obj.attachEvent){
                obj.attachEvent('on'+type,fn)
            }
        }
        // 移除事件
        function removeEvent(obj,type,fn){
            if(obj.removeEventListener){
                obj.removeEventListener(type,fn,false)
            }else if(obj.detachEvent){
                obj.detachEvent('on'+type,fn)
            }
        }
        // 跨浏览器获取目标对象 
        function getTarget(evt){
            if(evt.taget){   // w3c
                return evt.getTarget
            }else if(window.event.srcElement){
                return window.event.srcElement;
            }
        }
        addEvent(window,'load',function(){
            var box = document.getElementById('box');
            addEvent(box,'click',change1)
        })
        function change1(evt){   
            var that = getTarget(evt)   
            that.innerHTML = '哈哈哈哈';
            addEvent(that,'click',change2);
            removeEvent(that,'click',change1);
        }
        function change2(evt){
            var that = getTarget(evt)
            that.innerHTML = '嘻嘻嘻嘻';
            addEvent(that,'click',change1);
            removeEvent(that,'click',change2);
        }
        </script>

    8.上下文菜单事件(contextmenu)

    ps:contextmenu事件很常用,这直接导致浏览器兼容性较为稳定

    <textarea style=" 200;height: 200" id="text"></textarea>
    <ul id="menu">
    <li>菜单1</li>
    <li>菜单2</li>
    <li>菜单3</li>
    </ul>

    <javascript>
    addEvent(window,'load',function(){ var text = document.getElementById('text'); addEvent(text,'contextmenu',function(evt){ evt.preventDefault(); var menu = document.getElementById('menu'); var e = evt || window.event; menu.style.display = 'block'; menu.style.left = e.clientX+'px'; menu.style.top = e.clientY+'px'; addEvent(document,'click',function(){ menu.style.display = 'none'; }) }) }) function addEvent(obj,type,fn){ if(obj.addEventListener){ obj.addEventListener(type,fn,false) }else if(obj.attachEvent){ obj.attachEvent('on'+type,fn) } }
    <javascript>
     

    9.卸载前事件(当鼠标离开时进行提示 )

    <a href="http://www.baidu.com">baidu</a>
        <script type="text/javascript">
        addEvent(window, 'beforeunload', function(evt) {
            preDef(evt);
        })
    
        function addEvent(obj, type, fn) {
            if (obj.addEventListener) {
                obj.addEventListener(type, fn, false)
            } else if (obj.attachEvent) {
                obj.attachEvent('on' + type, fn)
            }
        }
        function preDef(evt){
            console.log('aaa');
            var e = event || window.event;
            if(e.preventDefault){
                e.preventDefault();
            }else{
                e.returnValue = false;
                console.log(e.returnValue);
            }
        }
        </script>

     10. 关于重复提交表单的问题(模拟延迟)

    disabled = true     (只限于按钮放置重复提交)

  • 相关阅读:
    Codeforces Round #346 (Div. 2) F. Polycarp and Hay 并查集 bfs
    Codeforces Round #346 (Div. 2) E. New Reform dfs
    Codeforces Round #346 (Div. 2) D. Bicycle Race 叉积
    Codeforces Round #346 (Div. 2) C. Tanya and Toys 贪心
    Codeforces Round #346 (Div. 2) B. Qualifying Contest 水题
    Codeforces Round #346 (Div. 2) A. Round House 水题
    VK Cup 2016
    Entity Framework DBFirst尝试
    Entity Framework简介
    设计模式之十(外观模式)
  • 原文地址:https://www.cnblogs.com/redpen/p/8820013.html
Copyright © 2011-2022 走看看