zoukankan      html  css  js  c++  java
  • jQuery的event事件

    1、冒泡和默认行为

     <div class="aa">
            <div class="bb">
                <div class="cc">
                    <em>
                        <strong>
                            冒泡测试3
                        </strong>
                    </em>
                </div>
            </div>
        </div>
        <div>
            <form action="http://www.baidu.com" method="post">
                <input type="submit" value="提交">
            </form>
    
            <a href="http://www.baidu.com">百度一下</a>
    
    
        </div>
    
        <script src="jquery-3.2.1.js"></script>
        <script>
            $(function () {
    //            $(document).bind("click",function () {
    //
    //                alert("第一层冒泡")
    //            })
    //            $("div .bb").bind("click",function () {
    //                alert("第二层冒泡测试")
    //            })
    //            $("div .cc").bind("click",function (e) {
    //                e.stopPropagation()
    //                alert("第三层冒泡测试")
    //            })
    
    
    
    //        第一层里是document,第二层是div,第三层还是div,都绑定了click事件,如果直接点第三层的事件,则首先会执行第三层绑定的函数,然后会执行第二层的函数,最后
    //        在实行最后一层的函数,如果我们想阻止这样的行为该怎么处理e.stopPropagation(),这样,这一层就不会出现冒泡行为了
    
    
    //            阻止默认行为是上面意思呢?比如我们的按钮,和超链接,如果我们点击了就会提交数据或者跳转到超链接,我们就可以使用代码实现阻止这样的默认行为
    //            看到下面的例子,就阻止了a标签和input标签的默认行为,preventDefault
    
    //            $("a").bind("click",function (event) {
    //                event.preventDefault()
    //            })
    //            $(":input[type='submit']").bind("click",function (event) {
    //                event.preventDefault()
    //           )}
    
    //            如果在函数中直接返回false,就可以实现取消默认行为+阻止冒泡行为
    

      

    2、模拟用户操作

        <input type="button" value="提交">
        <script src="jquery-3.2.1.js"></script>
        <script>
            $(function () {
    
    //            这个是用户的真实操作,而不是浏览器模拟用户操作,如果在加上下面的代码,就实现了浏览器模拟用户的click事件
    //            $(this).bind('click',function () {
    //                alert("模拟用户点击页面")
    //
    //            $(this).trigger('click')
    //
    //        })
    
    //            用下面这种写法也可以实现模拟用户行为
    //            $('input').bind('click',function () {
    //                alert("第二种模拟用户点击页面的方法")
    //            }).trigger('click')
    
    
    //            自定义事件,主要是用在只要浏览器刷新就会自动执行的事件,相当于刷新页面触发一个函数一样的效果
    //            $(':input').bind('myevent',function () {
    //                alert("自定义事件")
    //            }).trigger('myevent')
    
    //trigger和triggerHandler的区别
    //            1、如果标签有默认行为,则riggerHandler不会执行默认行为,trigger则会执行默认行为,比如点击按钮提交数据,这里就会有一个默认的行为
    //            2、如果匹配到多个标签,则trigger会每个标签执行一次,而triggerHandler只第一个标签会执行默认行为,后面的标签不会执行默认行为
    //            3、返回值不一样
    
    
    
    //命令空间,比如下面的例子,一个input上绑定了2个click事件,但是我们只想把abc这个事件去掉该怎么办呢,我们可以在click后加一个点,在一些随机数就可以了
    
    //            $("input").bind('click',function () {
    //                    alert('abc')
    //            })
    //            $("input").bind('click',function () {
    //                    alert('123')
    //            })
    //
    //            $("input").bind('click.abc',function () {
    //                    alert('abc')
    //            })
    //            $("input").bind('click.123',function () {
    //                    alert('123')
    //            })
    //
    //            $("input").unbind('click.123')
    
    
    
    
             })
    

      

    3、事件委托

      <div class="aa" id="box">
            <input type="button" value="按钮">
            <input type="button" value="按钮">
            <input type="button" value="按钮">
            <input type="button" value="按钮">
        </div>
        <script src="jquery-3.2.1.js"></script>
        <script>
            $(function () {
    //            $(':button').bind('click',function () {
    //                alert("事件不委托")
    //            })
    
    //            使用live绑定的是document,而非button,所有永远只会绑定一次事件
    //            $(":button").live('click',function () {
    //                alert('事件委托绑定')
    //
    
    
    
    //            })
    //            bind不能动态绑定,比如下面的例子,我开始有4个button按钮,我点击这4个中的任何一个
    //            都会触发下面的click事件,然后复制出来一个按钮,但是如果我点击复制出来的按钮,则不会
    //            在复制出来新的按钮,这就是bind不能动态绑定的意思;同样live可以实现动态绑定,因为事件是
    //            绑定在document上,而点击button是冒泡到document,如果要触发这个冒泡,还会校验event type
    //            和event target
    //            $(':button').bind('click',function () {
    //                $(this).clone().appendTo(".aa")
    //
    //            })
    //            live已经被废弃了,live的替代方法是delegate<,他只绑定父元素
    //            $("#box").delegate('input','click',function () {
    //                $(this).clone().appendTo('#box')
    //            })
    //
    //            $("#box").undelegate("input",'click')
    
    
    
    //on off one 这个才是重点
    
    //普通的绑定:bind
    //普通的解绑:unbind
    //普通的事件委托:delegate
    //普通的事件委托解绑:undelegate
    //方法太多,导致换乱,所有这里提供了新的方法 on和off
    //新方法绑定:on
    //新方法解绑:off
    //            普通使用
    //        $(":input").on('click',function () {
    //            alert('替代bind')
    //
    //        })
    
    //        额外数据也是可以的
    //        $(":input").on('click',{user:'cui'},function (e) {
    //            alert('替代bind' + e.data.user)
    //
    //        })
    
    //        执行多个事件也是可以的
    //        $(":input").on('click dblclick',{user:'cui'},function (e) {
    //            alert('替代bind' + e.data.user)
    //
    //        })
    //          $(":input").on({
    //              click:function () {
    //                  alert('鼠标单击')
    //              },
    //              dblclick:function () {
    //                  alert('鼠标双击')
    //              }
    //          })
    
    
    //同样阻止默认行为和冒泡也是可以的,方法和bind是一样的
    
    
    //通过off来移除事件,也支持移除多个,也支持明明空间
    
    
    
    //on如何替换delegate呢?也是通过父元素绑定和删除
    //        $("#box").on('click',':input',function () {
    //            $(this).clone().appendTo('#box')
    //        })
    //移除事件委托
    //        $("#box").off('click',':input')
    
    //one的意思,仅仅触发一次,然后就会移除事件
    
    //            $(":input").one('click',function () {
    //                alert("one来触发事件")
    //            })
    
    //            同样one的委托效果也是一样的 ,只有第一次生效
    //            $("#box").one('click',':input',function () {
    //                $(this).clone().appendTo("#box")
    //            })
    
    
            })
    

      

  • 相关阅读:
    多线程之volatile关键字
    多线程具体实现
    多线程的概述
    Linux基本目录机构
    Java13新特性
    CF1316D【Nash Matrix】(dfs+构造+思维)
    ego商城项目学习总结+出现问题及解决
    java.lang.OutOfMemoryError: GC overhead limit exceeded之tomcat7优化
    jsp在tomcat中更新不起作用
    js取值及赋值
  • 原文地址:https://www.cnblogs.com/bainianminguo/p/7664613.html
Copyright © 2011-2022 走看看