事件(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);