访问DOM三种方式
|
|
JQuery选择器
|
|
筛选JQuery对象标识的结果
|
|
浏览器事件
流程: 发生物理时间->在浏览器中触发事件->浏览器创建事件对象->调用用户定义的事件处理程序
事件处理过程分为三个阶段:捕获阶段 目标阶段 冒泡阶段
(1).初始化
12 js:<body onload="function()">jquery:$(document).ready(funtion(){});$(document).load(function(){//其他资源都加载完再加载});$(funcion(){});
(2).js对元素进行事件监听 .addEventListener(‘click’,function())
(3).使用jQuery指定事件处理程序
on(events,[selector],[data],hander(eventObject))
on(events-map,[selector],[data])
off(events,[selector],hander(eventObject))
off(events-map,[selector])
辅助函数:
obj.click(dataObj,function handler(e){})
obj.hover(function enterhandler(e){},function leaveHandler(e){])
(4).手工触发事件
js:
obj.click() –>三个步骤 a = document.createEvent(“MouseEvnets”); a.initClick(“Click”);obj.dispatchEvent(clickEvent);
jquery:
$(“span”).click()
$(“.checkbox”).trigger(“click”)
$(“input.bigText”).trigger({“type”:”keypress”,”charCode”:13})
(5).创建自定义事件
(6).ajax跨域
1、为了复用,减少重复开发,单独开发了一个用户权限管理系统,共其他系统获取认证与授权信息,暂且称之为A系统;调用A系统以B为例。在B系统中用ajax调用A系统系统的接口(数据格式为json),当时特别困惑,在A系统中访问相应的url可正常回返json数据,但是在B系统中使用ajax请求同样的url则一点儿反应都没有,好像什么都没有发生一样。可能是ajax跨域问题,于是就将这个问题当做跨域问题来解决了。jQuery的ajax有jsonp这样的属性可以用来解决跨域的问题。
找到一种解决方式
jsonp:是数据格式JSON的一种“使用模式”,可以让网页从别的网域要数据。另一个解决这个问题的新方法是跨来源资源共享。维基百科jsonp
首先来看看在页面中如何使用jQuery的ajax解决跨域问题的简单版:
服务器端:
|
|
2、把script元素的src属性设成一个回传JSON的URL是可以想像的,这也代表从HTML页面通过script元素抓取JSON是可能的。然而,一份JSON文件并不是一个JavaScript程序。为了让浏览器可以在script元素运行,从src里URL回传的必须是可运行的JavaScript。在JSONP的使用模式里,该URL回传的是由函数调用包起来的动态生成JSON。
(7).回调和闭包
回调定义:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
1.AJAX的异步加载时用到了回调函数的
2.同步中的使用
闭包定义:定义在一个函数内部的函数,但是呢,这个里面的函数他访问了他外面的那个函数的变量。
12345678910 function foo(x) {var tmp = 3;return function (y) {alert(x + y + (++tmp));}}var bar = foo(2); // bar 现在是一个闭包bar(10); //16 第一次调用bar(10); //17 第二次调用//在foo函数中已经形成了一个闭包,这就意味着,只要bar函不死,垃圾回收机制就不敢去动foo函数,而此时,我们的bar函数所指向的那个匿名函数就可以一直去访问那个tmp和x,且每次调用,都会得到上一次被自增了以后的tmp