03 - JQuery - 03.jQuery 事件

jQuery 事件

jQuery 事件注册

单个事件注册

  • element.事件(function() {})
    $("div").click(function() {事件处理程序})
  • 其他事件和原生基本一致,如 mouseovermouseoutblurfocuschangekeydownkeyupresizescroll

jQuery 事件处理

事件处理 on() 绑定事件

  • on() 方法在匹配元素上绑定一 / 多个事件的事件处理函数
  • element.on(events,[selector],fn)
    1.events:一 / 多个用空格分隔的事件类型,如"click""keydown"
    2.selector:元素的子元素选择器
    3.fn:回调函数,即绑定在元素身上的侦听函数
  • on() 方法优势
    1.可以绑定多个事件,多个处理事件处理程序
    2.可以事件委派操作
    ①事件委派:把原来加给子元素身上的事件绑定在父元素身上,即把事件委派给父元素
    ②在此之前有 bind()live()delegate() 等方法来处理事件绑定,最新版本的用 on 替代
    3.动态创建的元素,on() 可以给未来动态创建的元素绑定事件,click() 没办法给动态生成的元素绑定事件
  • 基础示例
    <head>
        <style>
            div {
                width: 100px;
                height: 100px;
                background-color: pink;
            }
            .current {
                background-color: purple;
            }
        </style>
        <script src="jquery.min.js"></script>
    </head>
    
    <body>
        <div></div>
        <ul>
            <li>我们都是好孩子</li>
            <li>我们都是好孩子</li>
            <li>我们都是好孩子</li>
            <li>我们都是好孩子</li>
            <li>我们都是好孩子</li>
        </ul>
        <ol></ol>
        <script>
            $(function() {
                // 单个事件注册
                // $("div").click(function() {
                //     $(this).css("background", "purple");
                // });
                // $("div").mouseenter(function() {
                //     $(this).css("background", "skyblue");
                // });
    
                // 事件处理 on()
                // 优势一
                $("div").on({
                    mouseenter: function() {
                        $(this).css("background", "skyblue");
                    },
                    click: function() {
                        $(this).css("background", "purple");
                    },
                    mouseleave: function() {
                        $(this).css("background", "blue");
                    }
                });
                $("div").on("mouseenter mouseleave", function() {
                    $(this).toggleClass("current");
                });
    
                // 优势二
                $("ul li").click();  // 隐式迭代给每一个 ul li 绑定 click() 事件,劣
                $("ul").on("click", "li", function() {  // click 绑定在 ul 上,li 触发。事件冒泡
                    alert(11);
                });
    
                // 优势三
                // $("ol li").click(function() {  // 无效
                //     alert(11);
                // });
                $("ol").on("click", "li", function() {
                    alert(11);
                });
                var li = $("<li>我是后来创建的</li>");
                $("ol").append(li);
            })
        </script>
    </body>
    
  • 微博发布效果示例
    <head lang="en">
        <style>
            * {
                margin: 0;
                padding: 0
            }
            ul {
                list-style: none
            }
            .box {
                width: 600px;
                margin: 100px auto;
                border: 1px solid #000;
                padding: 20px;
            }
            textarea {
                width: 450px;
                height: 160px;
                outline: none;
                resize: none;
            }
            ul {
                width: 450px;
                padding-left: 80px;
            }
            ul li {
                line-height: 25px;
                border-bottom: 1px dashed #cccccc;
                display: none;
            }
            input {
                float: right;
            }
            ul li a {
                float: right;
            }
        </style>
        <script src="jquery.min.js"></script>
        <script>
            $(function() {
                $(".btn").on("click", function() {
                    var li = $("<li></li>");
                    li.html($(".txt").val() + "<a href='javascript:;'> 删除</a>");
                    $("ul").prepend(li);
                    li.slideDown();
                    $(".txt").val("");
                });
    
                $("ul").on("click", "a", function() {
                    $(this).parent().slideUp(function() {  // 回调函数
                        $(this).remove();
                    });
                });
            })
        </script>
    </head>
    
    <body>
        <div class="box" id="weibo">
            <span>微博发布</span>
            <textarea name="" class="txt" cols="30" rows="10"></textarea>
            <button class="btn">发布</button>
            <ul></ul>
        </div>
    </body>
    

事件处理 off() 解绑事件

  • off() 方法可移除通过 on() 方法添加的事件处理程序
  • $("p").off()【解绑p元素的所有事件处理程序】
  • $("p").off("click")【解绑p元素的点击事件】
  • $("ul").off("click", "li")【解绑事件委托】
  • 如果有的事件只想触发一次,可使用 one() 来绑定事件
  • 示例
    <head>
        <style>
            div {
                width: 100px;
                height: 100px;
                background-color: pink;
            }
        </style>
        <script src="jquery.min.js"></script>
        <script>
        	$(function() {
        		$("div").on({
        			click: function() {
        				console.log("clicked");
        			},
        			mouseover: function() {
        				console.log("mouseovered");
        			}
        		});
        		// $("div").off();
        		// $("div").off("click");
        		
        		$("ul").on("click", "li", function() {
        			alert(11);
        		});
        		$("ul").off("click", "li");
        		
        		$("p").one("click", function() {  // 只触发一次
        			alert(11);
        		});	
        	})
        </script>
    </head>
    
    <body>
        <div></div>
        <ul>
            <li>我们都是好孩子</li>
            <li>我们都是好孩子</li>
            <li>我们都是好孩子</li>
        </ul>
        <p>我是屁</p>
    </body>
    

自动触发事件 trigger()

  • element.click()【元素.事件()】
  • element.trigger("type")【元素.trigger(“事件”)】
  • element.triggerHandler(type)【元素.triggerHandler(“事件”)】【不会触发元素的默认行为(默认行为:若表单获得了焦点,就有光标在里面闪动)】
  • 示例
    <head>
        <style>
            div {
                width: 100px;
                height: 100px;
                background-color: pink;
            }
        </style>
        <script src="jquery.min.js"></script>
        <script>
            $(function() {
                $("div").on("click", function() {
                    alert(11);
                });
                $("input").on("focus", function() {
                    $(this).val("你好吗");
                });
    
                // $("div").click();  // 法一
                // $("div").trigger("click");  // 法二
                // $("div").triggerHandler("click");  // 法三
                // $("input").trigger("focus");  // 法二,光标闪动
                $("input").triggerHandler("focus");  // 法三,光标不闪动
            })
        </script>
    </head>
    
    <body>
        <div></div>
        <input type="text">
    </body>
    

jQuery 事件对象

  • element.on(events, [selector], function(event) {})
  • 阻止默认行为
    event.preventDefault()return false
  • 阻止冒泡
    event.stopPropagation()
  • 事件被触发,就会有事件对象的产生
  • 示例
    <head>
        <style>
            div {
                width: 100px;
                height: 100px;
                background-color: pink;
            }
        </style>
        <script src="jquery.min.js"></script>
        <script>
            $(function() {
                $(document).on("click", function() {
                    console.log("document clicked");
                });
                $("div").on("click", function(event) {
                    console.log("div clicked");
                    event.stopPropagation();  // 阻止冒泡
                });
            })
        </script>
    </head>
    
    <body>
        <div></div>
    </body>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值