javascript4 事件

  javascript的作用是动态修改html和css代码,发生某种事件后(比如点击网页上某个按钮或者下拉框),可以触发执行一段javascript代码,事件可以用于处理表单验证,用户输入,用户行为及浏览器动作

事件:点击网页的按钮叫做事件

事件源:被点击的按钮

响应行为:几点按钮后触发执行javascript代码段,叫做响应行为

常用事件:

onclick       点击html元素触发的事件
onchange    HTML 元素被改变的事件
onfoucus   获得焦点事件,即鼠标点击html元素的事件
onblur失去焦点的事件,即鼠标从html元素松开
onmouseover    用户在一个HTML元素上移动鼠标
onmouseout    鼠标从一个HTML元素上移开的事件
onkeydown    用户按下键盘按键
onload    浏览器已完成页面加载后执行的事件

事件绑定的方式

即在html中和事件相关联的方式

方式1

事件和响应行为都嵌入到html标签中

方式2

事件嵌入到html标签中,响应行为在js代码中编写,事件指向响应行为

方式3

事件和响应行为与html分离开,在js代码中编写事件的响应行为,html元素和事件的关联由系统控制

说明:每个html元素都有id属性,通过document文档对象的getElementById(id名称)的方法可以获取该id的标签对象

示例:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>事件绑定</title>
</head>
<body>
    <!-- 方式1 事件和行为都嵌入到元素标签中 -->
	<a href="http://www.baidu.com" onclick="alert('弹出通知框后再访问百度')"> 百度</a>
	<!-- 方式2 事件在html元素中,行为在js代码块中 -->
	<a href="http://www.163.com" onclick="invoke1()">网易</a>
	<!-- 方式3 事件和行为都在js中定义 -->
	<a href="http://www.qq.com" id="qq"> 腾讯</a>
</body>
<script type="text/javascript">
	function invoke1(){
		alert("弹出通知框后,再访问网易网")
		
	}
	
	var tenlink=document.getElementById(qq);
	tenlink.onclick=function(){
		alert("弹出通知框后,再访问腾讯网");
	}

</script>
</html>

this关键字

javascript中this只带当前对象,在元素标签中使用函数时,this可以作为参数传递html中的标签对象

示例:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
       <a href="#"  id="html"   onclick="method1(this)">空网页链接</a>
       <input type="button" id="btn" value="点我试试" onclick="method1(this)">
</body>

<script type="text/javascript">
	function method1(x){
		alert(x.value);
		alert(x.id);
	}

</script>
</html>

示例中,在input标签中使用函数,this作为参数,将整个input标签传递到javascript中,在javascript中相关的代码就可以使用input标签的属性了

事件部分

1 onclick事件

当用户点击鼠标时触发的事件,上面的示例中已经说明了onclick的用法

说明: onclick 属性不适用以下元素:<base>、<bdo>、<br>、<head>、<html>、<iframe>、<meta>、<param>、<script>、<style> 或 <title>

onchange事件

html元素被改变的事件,下面示例模拟省市的选择框联动

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>onchange</title>
</head>
<body>
	<select id="province">
		<option value="heb">河北 </option>
		<option value="bj">北京 </option>
		<option value="hen">河南 </option>
		<option value="sd">山东 </option>
	</select>
	
	<select  id="city">
	<option >廊坊</option>
	<option >保定</option>
	<option >邯郸</option>
	<option >邢台</option>
	</select>
</body>
<script type="text/javascript">
    var selectprov=document.getElementById("province");
    selectprov.onchange=function(){
    	var city=document.getElementById("city");
    	var provValue=selectprov.value;
    	switch(provValue){
    		case "bj": city.innerHTML="<option >朝阳</option><option >海淀</option><option >丰台</option><option >东城</option>";break;
    		case "heb": city.innerHTML="<option >廊坊</option><option >保定</option><option >邯郸</option><option >邢台</option>";break;
    		case "hen": city.innerHTML="<option >郑州</option><option >洛阳</option><option >平顶山</option><option >开封</option>";break;
    		case "sd": city.innerHTML="<option >济南</option><option >青岛</option><option >聊城</option><option >齐鲁</option>";break;
    		default: alert("error");
    	};
    	
    }

</script>
</html>

说明,用到innerHTML,下面介绍innerHTML的用法,和innerText

innerHTML可获取或设置指定元素标签内的 html内容,从该元素标签的起始位置到终止位置的全部内容(包含html标签)

获取元素的内容:element.innerHTML;

给元素设置内容:element.innerHTML =htmlString;

innerText:从起始位置到终止位置的内容, 但它去除了Html标签,且只适用于IE浏览器,使用replace(/<.+?>/gim,'')来去除innerHTML获取到的内容中的标签

2 onfcous和onblur

onfocus 属性在元素获得焦点时触发,获得焦点事件。onfocus 常用于 <input>,<select> , <a>标签中,onblur 属性在元素失去焦点时触发,失去焦点属性,常用于表单验证代码(例如用户离开表单字段)

示例:input获得焦点和失去焦点分别给用户一个提示信息,并改变背景色

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>onfocus和onblur</title>
</head>
<body>
   <div >
     <span >请输入用户名</span>
   	<span >
   	 <input type="text" id="username" >
   	</span>
   	<span id="usertext"></span>
   </div> 
</body>
<script type="text/javascript">
   var username=document.getElementById("username");
   username.onfocus=function(){
	   usertext=document.getElementById("usertext");
	   usertext.innerHTML="请输入6-20位的字符";
	   usertext.style.color="green";
   };
   username.onblur=function(){
	   usertext=document.getElementById("usertext");
	   usertext.innerHTML="您输入的格式有误";
	   usertext.style.color="red";
   };


</script>
</html>

说明:onfocus 不适用于以下标签:<base>、<bdo>、<br>、<head>、<html>、<iframe>、<meta>、<param>、<script>、<style> 或 <title>。onblur当用户离开输入字段时对其进行验证

3 onmouseover和onmouseout

顾名思义onmouseover    用户在一个HTML元素上移动鼠标触发的事件,鼠标悬浮事件 onmouseout    鼠标从一个HTML元素上移开的事件,鼠标移开事件

onmouseover 属性可使用于所有 HTML 元素,除了: <base>, <bdo>, <br>, <head>, <html>, <iframe>, <meta>, <param>, <script>, <style>, 和 <title>.

示例:实现一个p元素被鼠标悬浮时变为黑色 鼠标移走时变成灰色

<!DOCTYPE html>
<html>
<head>
<style type="text/css" >
	#div1{
		width:120px;
		height:120px;
		background-color:green;
	    margin: 10px;
	    padding:10px;
	    border-style: solid;
	}
	#p1{ 
		width:100px;
		height:100px;
	    background-color:red;
	    font-siez:18px;
	    
	}
</style>
<meta charset="UTF-8">
<title>onmouseover And onmouseout</title>
</head>
<body>
 <div id="div1">
	<p id="p1">
	鹅鹅鹅<br>
	曲项向天歌<br>
	白毛浮绿水<br>
	红掌拨青波<br>
	</p>
  </div>
</body>

<script type="text/javascript">
	p1=document.getElementById("p1");
	p1.onmouseover=function(){
		//p1.style.backgroundColor="black";
		this.style.backgroundColor="black";//可以用this都可以指代当前对象
	}
	p1.onmouseout=function(){
		//p1.style.backgroundColor="grey";
		this.style.backgroundColor="grey";//可以用this都可以指代当前对象
	}

</script>

</html>

说明,

1 html的每个元素(即标签)都有style属性 ,用来设置css内容,在js中可以通过对象.属性.属性的方式调用,可以获取该属性,也可以该该属性赋值,向上面说的innerHTML属性

2this关键字指代当前对象,可以在对象的属性(匿名函数中用this指代对象),当然使用对象名也是可以的

 

4 onload

当页面加载完毕后,执行的事件

onload,document都是window对象的属性,但是可以省略window这个名字,onload是属于高级别的,所以onload代码段放在html前面后面都一样

示例:实现加载完段落后设置段落的颜色,并将段落中的内容变成helloworld

<!DOCTYPE html>
<html>
<head>
<style type="text/css" >
	#div1{
		width:120px;
		height:120px;
	    margin: 10px;
	    padding:10px;
	    border-style: solid;
	}
	#p1{ 
		width:100px;
		height:100px;
	    font-siez:18px;
	    
	}
</style>
<script type="text/javascript">
  window.onload=function(){
	  p1=document.getElementById("p1");
	  p1.style.backgroundColor="red";
	  div1=document.getElementById("div1");
	  div1.style.backgroundColor="green";
	  p1.innerHTML="helloworld";
	  
  }

</script>
<meta charset="UTF-8">
<title>onload</title>
</head>
<body>
 <div id="div1">
	<p id="p1">
	鹅鹅鹅<br>
	曲项向天歌<br>
	白毛浮绿水<br>
	红掌拨青波<br>
	</p>
  </div>
</body>
</html>

注:该示例的加载速度太快,可能难以看到效果

5 阻止事件的默认行为

html的<a></a>标签中有默认的onclick行为,这种行为叫做事件默认行为,可以通过js代码来阻止事件的默认行为

因为早期的IE不兼容W3C协议,使用自己特有的方式,所以编写代码时要注意区分浏览器种类

IE中阻止默认行为的语句:IE:window.event.returnValue = false;

W3C协议的语句:传递过来的对象.preventDefault();

示例:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript">
	function func(e){
		if(e&&e.preventDefault){
			alert("这是使用w3c标准的浏览器");
			e.preventDefault();
		}else{
			alert("这是IE");
			window.event.returnValue=false;
		}
	}
</script>

<title>阻止事件默认行为</title>
</head>
<body>
	<a href="18事件绑定.html" >点我</a>
	<a href="http://www.baidu.com" onclick="func(event)">点我试试</a>
</body>
	
</html>

说明:在标签中调用js方法阻止默认行为时,函数中传入的对象是event(事件),而不是this(标签对象),    js代码的判断条件中,

对象.preventDefault没有括号

6 阻止事件的传播

比如盒子模型,大盒子里包有小盒子,小盒子覆盖了大盒子的一部分,当点击小盒子时,也会触发大盒子的onclick事件,如果不希望这种事件行为产生,需要用js代码来阻止

同样对于早期的IE浏览器使用阻止语句:window.event.cancelBubble = false;

对于支持W3C的浏览器:传递过来的对象.stopPropagation();

示例:以<div></div>行标签里面有一个<p></p>标签为例,onclick事件设置为弹出通知元素的id值

<!DOCTYPE html>
<html>
<head>
<style type="text/css" >
	#div1{
		width:120px;
		height:120px;
		background-color:green;
	    margin: 10px;
	    padding:10px;
	    border-style: solid;
	}
	#p1{ 
		width:100px;
		height:100px;
	    background-color:red;
	    font-siez:18px;
	    
	}
</style>
<meta charset="UTF-8">
<title>阻止事件的传播</title>
</head>
<body>
 <div id="div1" onclick="func1()" >
	<p id="p1" onclick="func2(event)">
		鹅鹅鹅<br>
		曲项向天歌<br>
		白毛浮绿水<br>
		红掌拨青波<br>
	</p>
  </div>
</body>

<script type="text/javascript">
	function func1(){
		alert("我属于div1");
	}
	function func2(e){
		alert("我属于p1");
		if(e&&e.stopPropagation){
			alert("这是w3c浏览器");//测试用
			e.stopPropagation();
		}else{
			alert("这是IE浏览器");//测试用
			window.event.calcelBubble=false;
		}
	}
</script>

</html>

注意:html元素标签中使用js函数,函数中传入的对象是event(事件),在js的判断条件中, 对象.stopPropagation没有括号

参考:小猴子视频

    http://www.runoob.com/jsref/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值