天行健, 君子以自强不息
Sunny's Blog
Title

事件(3)关于js事件处理(持续更新--2016/05/23)

1.关于load事件

当文档和其他外部资源(比如图片)完全加载并显示给用户时就会触发他。

                     测试代码如下:
                    <img id="test" src="http://bourbon.io/images/marketing/ruby.png">
                    <script type="text/javascript" src="js/lib/jquery-2.1.4.min.js"></script>
                    <script type="text/javascript">
                        window.addEventListener("load",function(){
                            alert("111");
                        },false);
                        $(document).ready(function(){
                            alert("222");
                        });
                        $("#test").load(function(){
                            alert("333");
                        });
                        var script = document.createElement("script");
                        document.body.appendChild(script);
                        script.src = "js/lib/jquery-2.1.4.min.js";
                    </script>
                    </body>
                

我在jquery-2.1.4.min.js中添加了一个alert("000");

alert的弹出顺序为000,222,000,333,111。也就是说jquery提供的ready是在dom渲染好并且同步的js下载执行完就执行,不会等异步的js和图片等资源,但是window会等。其中第二个000和333的顺序可能会发生变化,因为不知道谁先下载完成,但是111一定是在最后的。

2.关于事件调用顺序

1)在html标签上进行属性注册( <div class="test" onclick="alert('111');"></div> )和设置对象属性事件( $(".test")[0].onclick = function() )这两种方式会一直优先处理。但是这两种如果调用一种事件的话,后面的会覆盖前面的事件。

2)使用addEventListener()注册是事件会按照他们的注册顺序调用。这个相同事件没有覆盖,按顺序执行的。

3)attachEvent()顺序不受控,在IE9以下使用。

3.事件传播顺序

1)事件捕获--只能用于以使用addEventListener()注册且第三个参数是true的事件处理程序中,也就是说事件捕获无法在IE9之前的IE中使用。

2)目标对象本身的事件处理程序调用。

3)事件冒泡。

4.focus和blur事件与focusin和focusout事件的冒泡区别

focusin和focusout事件跟focus和blur事件区别在于,他可以在父元素上检测子元素获取焦点的情况。也就是说子元素的事件可以绑定到父元素上,然后通过子元素冒泡到父元素近而触发。(这个jquery也是一样的).focusin和focusout事件可冒泡。

5.键盘事件keydown,keyup,keypress

在keydown和keyup中会隔着keypress,keypress是比较高级的事件,他指定产生的字符是可打印的,比如回车,tab之类的按键就不会触发他。

6.scrollIntoView替代锚点做页面定位

$('#connectResultsCount').get(0).scrollIntoView();

                    语法: 
                    object.scrollIntoView( [bAlignToTop])
                    参数:
                    bAlignToTop 布尔型:true/false,默认参数不传则为true
                    true:对象的顶端与当前窗口的顶部对齐
                    false:对象的底端与当前窗口的顶部对齐
                    支持的浏览器:
                    这个是W3C定义的DOM方法,各浏览器均支持,包括:IE5.5+、FF2.0
                

7.Base64

有些时候需要用base64编码来解决问题,详细如下:

                    window.Base64见script
                    // Encode the String
                    // var encodedString = Base64.encode(string);
                    // // Decode the String
                    // var decodedString = Base64.decode(encodedString);
                

地势坤,君子以厚德载物