焦点 、event对象、事件冒泡、事件绑定、AJAX知识点备忘

焦点:使浏览器能够区分用户输入的对象,当一个元素有焦点的时候,那么他就可以接收用户的输入。

设置焦点的几种方式:

1、点击

2、TAB键

3、JS

onfocus   onblur 属性

var oinp=document.getElementById(‘shuru‘)

oinp.onfocus=function(){

if(oinp.value==‘请输入‘){

oinp.value=‘‘

}

}

oinp.onblur=function(){

if(oinp.value==‘‘){

oinp.value=‘请输入‘

}

}

-----------------------------------

JS设置焦点 如点击百度首页 已进入页面 焦点就会自动搜索框里面

focus()    blur()  select()方法

chrome ff 不支持操作复制  可以用select()方法

xxx.focus()

---------------------------------------------------

事件对象:当一个事件发生的时候,当前这个对象发生的这个事件的一些详细信息(json)被临时保存

到一个指定地方---event对象,必须事件发生后才能用,在事件调用函数里面使用,就像飞机的黑匣子

IE/Chrome :event是一个内置对象 就像document对象一样

如 document.onclick=alert(1)  这个就不是点击事件发生后执行的,这个是一打开网页就执行了,和点击事件没关系

,而事件对象必须是在当前这个事件发生后才能获取相关事件信息,所以用函数把后面这一块包起来,让他点击后才发生后面的事件

document.onclick=function(){alert(event)} 这样才能获取当前点击事件的event信息。

function haha(){

alert(event)

}

haha() //这样就不是事件调用的函数,会返回空或者未定义

document.onclick=haha //这样就是事件调用的,这样就会有点击的事件的相关信息

一个函数是不是事件函数,不在于定义的时候,而是在于调用的时候

FF下面调用事件对象,事件对象是通过事件函数的第一个参数传入的,如果一个函数是被事件调用的

那么这个函数定义的第一个参数就是事件对象

兼容:var ev=ev||event

查看点击事件EVENT事件对象的信息

function haha(ev){

var ev=ev||event

for(var attr in ev){

console.log(attr+‘=‘+ev[event])

}

}

document.onclick=haha

------------------------------------

clientX Y的使用   当一个事件发生的时候,鼠标到可视区的位置

window.onload=function(){

var odiv=document.getElementById(‘jieshao‘)

function haha(ev){

var st=document.documentElement.scrollTop||document.body.scrollTop

var ev=ev||event

odiv.style.display=‘block‘

odiv.style.left=ev.clientX+‘px‘

odiv.style.top=ev.clientY+st+‘px‘

}

document.onmousemove=haha

}

</script>

<body style="height:2000px;">

<p  id=‘jieshao‘ style="background:red; position:absolute; display:none">详细信息</p>

</body>

--------------------------------------------

事件冒泡:当一个元素接收到事件(onclick,onmouseover...)的时候,他会把事件传播到他的父级,直到WIndow

也就是一个元素接收到事件的时候,他不仅触发他自己的事件,还会把事件传播到父级,父级又传播到父级.

<style>

div{padding:30px;}

#div1{background:red;}

#div2{background:green;}

#div3{background:blue; position:absolute; top:200px;}

</style>

<script>

window.onload=function(){

var odiv1=document.getElementById(‘div1‘)

var odiv2=document.getElementById(‘div2‘)

var odiv3=document.getElementById(‘div3‘)

function haha(){alert(this.id)}

odiv3.onclick=haha

/*odiv2.onclick=haha*/

odiv1.onclick=haha

}

</script>

<body>

<div id="div1">

<div id="div2">

<div id="div3">

</div>

</div>

</div>

</body>

-------------------------------------------

事件绑定函数

事件冒泡跟绑不绑定函数没关系

例子就如同我捡到100块钱,这就是一个事件,然后这100块钱怎么处理交给谁这就是一个函数

所以如上个例子

odiv3.onclick=haha

odiv2.onclick=haha

odiv1.onclick=‘‘

这里如果不给odiv3绑定函数,他也会冒泡到父级

阻止当前事件对象冒泡:

event.canceleBubble=true

-----------------------

例2.点击按钮显示列表,点击document,隐藏列表

因为input是document的子元素

所以当点击input的时候,列表先显示,然后冒泡把事件传播到document

而document又触发了接收到的点击事件,又把列表隐藏了。。所以切换速度太快,显示结果就是没变化,

<script>

window.onload=function(){

var odiv=document.getElementById(‘div1‘)

var oinp=document.getElementById(‘anniu‘)

oinp.onclick=function(ev){

odiv.style.display=‘block‘

/* var ev=ev||event

ev.cancelBubble=true */ 阻止当前点击事件冒泡

}

document.onclick=function(){

setTimeout(function(){

odiv.style.display=‘none‘

},1500)

}

}

</script>

<body>

<input type="button" id="anniu" value=‘点击‘/>

<div id="div1">

这是一个列表

</div>

</body>

----------------------------------

分享到按钮制作:只给父级加函数,子元素会在事件发生时把事件传播到父级

#div1{background:red;width:100px; height:200px; background:red; position:absolute; left:-100px;top:150px;}

#div2{width:20px; height:65px; position:absolute;right:-20px; top:60px;background:green;padding-top:15px;color:#fff}

</style>

<script>

window.onload=function(){

var odiv1=document.getElementById(‘div1‘)

odiv1.onmouseover=function(){

this.style.left=‘0px‘

}

odiv1.onmouseout=function(){

this.style.left=‘-100px‘

}

}

</script>

<body>

<div id="div1">

<div id="div2">分享到</div>

</div>

</body>

----------------------------------------------------------------------------

事件绑定第二种形式:

我们前面一般是这样绑定的(赋值形式)

xxx.onclick=function(){}

xxx.onmouseover=function(){}

取消绑定:

xxx.onclick=null

但是这样有个不足如下:

function fn1(){}

function fn2(){}

document.onclick=fn1

document.onclick=fn2

这样的话 第二个绑定函数会覆盖第一个绑定函数

为了能给某个对象同一个事件增加多个绑定函数

事件绑定的第二种方式:

IE 下:obj.attachEvent(事件名称,事件函数)

1.不能捕获

2.事件名称有on

3.this指向window

解决指向问题

call是函数下的一个方法

fn1.call()==fn1()

call()方法的第一个参数可以改变函数执行过程中内部this指向的问题

有其他参数的话,后面就紧跟其他的参数

如:

document.attachEvent(‘onclick‘,fn1)

document.attachEvent(‘onclick‘,fn2)

取消绑定:

doccument.deattachEvent(‘onclick‘,fn1)

doccument.deattachEvent(‘onclick‘,fn2)

改变this指向为document

document.attachEvent(‘onclick‘,function(){fn1.call(document)})

document.attachEvent(‘onclick‘,function(){fn2.call(document)})

标准下:obj.addEventListener(事件名称,事件函数,是否捕获)

是否捕获,默认下为false,即冒泡

1.能捕获

2.事件名称没有on

3.指向触发该事件函数的对象

document.addEventListener(‘click‘,fn1,false)

document.addEventListener(‘click‘,fn2,true)

取消绑定:

doccument.removeEventListener(‘click‘,fn1,false)

doccument.removeEventListener(‘click‘,fn2,true)

绑定方法封装:

function bind(obj,evname,fn){

if(obj.attachEvent){

obj.attachEvent(‘on‘+evname,

function(){fn.call(obj)}

)

}

else{

obj.addEventListener(evname,fn,false)

}

}

-----------------------------------------------------------

AJAX:

最简单的流程:

<script>

window.onload=function(){

var obtn=document.getElementById(‘btn‘)

obtn.onclick=function(){

var xhr;

try {

xhr = new XMLHttpRequest();

} catch (e) {

xhr = new ActiveXObject(‘Microsoft.XMLHTTP‘);

}

xhr.open(‘get‘,‘1.txt‘,true)

xhr.send()

xhr.onreadystatechange=function(){

if(xhr.readyState==4){

if(xhr.status==200){

alert(xhr.responseText)}else{alert(‘错误信息:‘+xhr.status)}

}

}

}

}

</script>

<body>

<input type="button" value="按钮" id="btn" />

</body>

-------------------------------------------------------

//过程解释说明

<script>

window.onload=function(){

var obtn=document.getElementById(‘btn‘)

obtn.onclick=function(){

var xhr;

var xhr=new XMLHttpRequest() //创建一个AJAX对象,就像打开浏览器

//IE6下创建AJAX对象:new ActiveXObject(‘Miscrosoft.XMLHTTP‘)

//兼容写法:

/*if(window.XMLHttpRequest){

xhr=new XMLHttpRequest();

}else{xhr=new ActiveXObject(‘Microsoft.XMLHTTP‘)}*/

//或者用try catch的方式

//try catch 的用法

/*try {

//代码尝试执行这个块中的内容,如果有错误,则会执行catch{}, 并且传入错误信息参数

//alert(a);

//new throw();

//throw new Error(‘错了错了‘);直接抛错

} catch (e) {

alert(e);

}*/

try {

xhr = new XMLHttpRequest();

} catch (e) {

xhr = new ActiveXObject(‘Microsoft.XMLHTTP‘);

}

xhr.open(‘get‘,‘1.txt‘,true) //通过什么方式获取,获取东西得地址,是否异步,默认是异步,这一步相当于在浏览器地址栏输入地址

//异步 同步的说明 :异步(非阻塞)的意思是前面代码的不影响后面代码的执行。而同步(阻塞)就是前面代码会影响后面代码的执行

xhr.send()//提交

//等待服务器返回内容

xhr.onreadystatechange=function(){

if(xhr.readyState==4){

alert(xhr.responseText)//获取的是字符串

}

}

}

}

</script>

<body>

<input type="button" value="按钮" id="btn" />

</body>

-----------------------------------------------------

readyState : ajax工作状态

responseText : ajax请求返回的内容就被存放到这个属性下面

on readystate change : 当readyState改变的时候触发

status : 服务器状态,http状态码

xhr.onreadystatechange = function() {

if ( xhr.readyState == 4 ) {

if ( xhr.status == 200 ) {

alert( xhr.responseText );

} else {

alert(‘出错了,Err:‘ + xhr.status);

}}}

-----------------------------------------------------

get方式缓存问题和中文乱码问题:

1.缓存 在url?后面连接一个随机数,时间戳

2.乱码 编码encodeURI

xhr.open(‘get‘,‘2.get.php?username=‘+encodeURI(‘中文‘)+‘&haha=hehe&‘ + new Date().getTime(),true);

xhr.send();

xhr.open(‘post‘,‘2.post.php‘,true);

//post方式,数据放在send()里面作为参数传递

xhr.setRequestHeader(‘content-type‘, ‘application/x-www-form-urlencoded‘);//申明发送的数据类型

//post没有缓存问题

//无需编码

xhr.send(‘username=中文&haha=hehe‘);

-----------------------------------------------------

同步 异步解释

setTimeout(function() {

alert(1);

}, 2000); //在这里定时器不会在2秒后执行后才执行下面的alert(2),这就是异步,不影响后面代码的执行

alert(2)

<script src="jquery.js"></script>-->

<script>

$(function(){}) //在这里如果没有上面的JQ引入,那么这里执行就会出问题,这就是同步,分先后,影响后面代码的执行

</script>

-----------------------------------------------------------

表单提交解释:

action:数据提交的地址, 默认提交当前页

method:提交的方式,默认是get方式

1.get

//age=

把数据名称和数据值用=连接,如果有多个的话,那么他会把多个数据组合用&进行连接,然后把数据放到url?后面传到指定页面

get方式缺点:

1、提交的数据大小限制

2、不安全,浏览器会缓存,通过历史记录会查看到提交的信息

2.post 理论上无限制

enctype : 提交的数据格式,默认application/x-www-form-urlencoded

<form action="1.get.php" enctype="application/x-www-form-urlencoded">

<input type="text" name="username" />

<input type="text" name="age" />

<input type="submit" value="提交" />

</form>

-----------------------------------------------------------

<script src="https://github.com/douglascrockford/JSON-js/blob/master/json2.js"></script>

JSON方法

JSON.stringify

可以把一个对象转成对应字符串

var arr=[1,2,3]

JSON.stringify(arr)

parse : 可以把字符串转成对应对象

var ostring = ‘[1,2,3]‘;

var oarr = JSON.parse(ostring);

//alert(oarr[0])

这里转换成数组

var ostring = ‘{"left":100}‘;

var ojson = JSON.parse(ostring);

alert(ojson.left)

这里转换成json对象

-----------------------------------------------------------

ajax封装:

function ajax(method, url, data, success) {

var xhr = null;

try {

xhr = new XMLHttpRequest();

} catch (e) {

xhr = new ActiveXObject(‘Microsoft.XMLHTTP‘);

}

if (method == ‘get‘ && data) {

url += ‘?‘ + data;

}

xhr.open(method,url,true);

if (method == ‘get‘) {

xhr.send();

} else {

xhr.setRequestHeader(‘content-type‘, ‘application/x-www-form-urlencoded‘);

xhr.send(data);

}

xhr.onreadystatechange = function() {

if ( xhr.readyState == 4 ) {

if ( xhr.status == 200 ) {

success && success(xhr.responseText);

} else {

alert(‘出错了,Err:‘ + xhr.status);

}

}

}

}

时间: 2024-10-19 20:32:51

焦点 、event对象、事件冒泡、事件绑定、AJAX知识点备忘的相关文章

简单总结焦点事件、Event事件对象、冒泡事件

每学习一些新的东西,要学会复习,总结和记录. 今天来简单总结一下学到的几个事件:焦点事件.Event事件对象.冒泡事件 其实这几个事件应该往深的说是挺难的,但今天主要是以一个小菜的角度去尝试理解一些基本的知识点. 1.焦点事件: 1.1概念理解: 想象场景:当一堆text文本框出现在面前,当点击其中一个文本框,它就会响应用户,并出现光标闪动(这时,点击令它获得焦点). 所以说:焦点事件是用来让浏览器区分哪一个对象是用户要进行操作(输入值.选择.跳转)的. 总结===>  浏览器(区分)哪一个对象

11.30js高级事件冒泡事件捕获

面向对象 单列模式 工厂模式 构造函数 (1) 类 Js天生自带的类 Object 基类 Function Array Number Math Boolean Date Regexp String 1.事件 浏览器客户端上客户触发的行为都称为事件 所有的事件都是天生自带的,不需要我们去绑定,只需要我们去触发. 通过obj.事件名=function(){} 事件名:onmouseover onmouseout onmousedown onmousemove onmouseup Onclick  o

理解js事件冒泡事件委托事件捕获

js事件冒泡 javascript的事件传播过程中,当事件在一个元素上出发之后,事件会逐级传播给先辈元素,直到document为止,有的浏览器可能到window为止,这就是事件冒泡现象. <div id="col">    <p>        <a id="btn" href="#">button</a>    </p></div> <script> let b

事件冒泡 事件捕获 事件委托

在javascript里,事件委托是很重要的一个东西,事件委托依靠的就是事件冒泡和捕获的机制,我先来解释一下事件冒泡和事件捕获: 事件冒泡会从当前触发的事件目标一级一级往上传递,依次触发,直到document为止.事件捕获会从document开始触发,一级一级往下传递,依次触发,直到真正事件目标为止. 这么说是不是很抽象,其实就像我敲击了一下键盘,我在敲击键盘的同时,我是不是也敲击了这台电脑,我写个例子大家就明白了: <!DOCTYPE html> <html> <head&

JavaScript和JQuery中的事件\委托链\事件冒泡\事件捕获,兼容所有浏览器

有做过北大青鸟培训讲师经验的我,如今在一家公司做技术部经理的职位,发现有很多程序员的基本功相当糟糕,在组织企业内部培训时讲解了一些案例,总结了一些经典代码,希望对自己和有需要的人提供一些帮助吧: JavaScript版本: DOM0事件不支持委托链 1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="C

事件冒泡,事件捕获

//JS事件流中有一种事件被称为“冒泡事件”,当一个元素被触发一个事件时,该目标元素上的事件会优先被执行,然后向外传播到每个祖先元素,恰如水里的一个泡泡似的,从产生就一直往上冒,到达水平面时,它才消失.在这个过程中,如果你只希望触发目标元素上的事件,而不想它传播到祖先元素上去,那么你需要在“泡泡”离开对象之前刺破它. //  事件冒泡是一个从子节点向祖先节点冒泡的过程: //事件捕获刚好相反,是从祖先节点到子节点的过程. //  方法一: return false;消除事件冒泡 //  方法二:

jQuery之防止冒泡事件,冒泡事件就是点击子节点,会向上触发父节点,祖先节点的点击事件。

冒泡事件就是点击子节点,会向上触发父节点,祖先节点的点击事件. 下面是html代码部分: <body> <div id="content"> 外层div元素 <span>内层span元素</span> 外层div元素 </div> <div id="msg"></div> </body> 对应的jQuery代码如下: <script type="text/

jquery中的ajax方法(备忘)

参考:https://www.cnblogs.com/tylerdonet/p/3520862.html 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和delete也可以使用,但仅部分浏览器支持. 3.timeout: 要求为Number类型的参数,设置请求超时时间(毫秒).此设置将覆盖$.ajaxSetup()方法的全局设置. 4.a

ajax基础------备忘

1:register.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dt