javaWeb基础03-JavaScript

js

js和html整合

方式1:在页面上直接写
	将js代码放在 <script></script>标签中,一般放在head标签中
<script type="text/javascript">
		alert("hello")
</script>
方式2:独立的js文件
	通过script标签的src属性导入
<script src="js/1.js"></script>

js中变量声明:

var 变量名=初始化值;
var 变量名;
	变量名=初始化值;
注意:
	var可以省略 建议不要省略
	一行要以分号结尾,最后一个分号可以省略,建议不要省略

js的数据类型:

原始类型:(5种)
	Null
	String
	Number
	Boolean
	Undefined
	通过 typeof运算符可以判断一个值或者变量是否属于原始类型,若属于原始类型,他还可以判断出属于那种原始类型
		typeof 变量|值;
	若变量为null,使用typeof弹出的值 object
	
	使用typeof的返回值
		undefined - 如果变量是 Undefined 类型的 
		boolean - 如果变量是 Boolean 类型的 
		number - 如果变量是 Number 类型的 
		string - 如果变量是 String 类型的 
		object - 如果变量是一种引用类型或 Null 类型的 
var b=false;
alert(typeof b);  boolean

函数的定义:

方式1:
	function 函数名(参数){
		函数体;
	}	
方式2:
	var 函数名=function(参数){
		函数体;
	}

js中的事件:

常见的事件:
	单击:  onclick
	表单提交: onsubmit 加在form表单上的 onsubmit="return 函数名()"  注意函数返回值为boolean类型
	页面加载: onload
<form action="#" onsubmit="return checkForm()" method="post">
	姓名:<input type="text" id="username" /><br>
	年龄:<input type="text" id="age" /><br><br>
	<input type="submit" />
</form>
onsubmit是在提交form前执行的方法,返回Boolean,true:就提交;false:不提交
<script>
	function checkForm(){
		//获取 几个input的值,判断是否为空
		var usernameObj = document.getElementById("username");
		if('' == usernameObj.value){
			alert("姓名不能为空");
			return false;
		}
		
		var ageObj = document.getElementById("age");
		if('' == ageObj.value){
			alert("age不能为空");
			return false;
		}
		
		return true;
	}
</script>

js事件和函数的绑定:

	方式1:
		通过标签的事件属性   <xxx onclick="函数名(参数)"></xxx>
	方式2:
		给元素派发事件
			document.getElementById("id值").onclick=function(参数){....}
			document.getElementById("id值").onclick=函数名
		注意:
			内存中应该存在该元素才可以派发事件
		a.将方式2的js代码放在html页面的最下面
		b.在页面加载成功之后在运行方式2的js代码  onload事件.
<body onload="init()">
	<input type="button" onclick="f1()" value="点击f1" />
	<input type="button" id="btn2" value="点击f2">
	<input type="button" id="btn3" value="点击f3">
</body>
<script>
	function init(){
		document.getElementById("btn2").onclick=f2;
		document.getElementById("btn3").onclick=f3;
	}
	function f1(){
		alert('f1');
	}
	function f2(){
		alert('f2');
	}
	var  f3=function(){
		alert('f3');
	}
</script>

js获取元素:

方式1:
	var obj=documnet.getElementById("id值");
获取元素的value值
	obj.value;
获取元素的标签体中的内容
	obj.innerHTML;
<input id="btn1" type="button" value="点击" onclick="f1()" />
function f1(){
	//1现获取到标签对象
	var obj=document.getElementById("btn1");
	//2在获取标签的属性对应的值
	alert(obj.value);
}

修改样式:

<script>
	function f1(){
		var obj = document.getElementById("divId1");
		obj.style.backgroundColor="red";
		obj.style.border="1px solid blue";
		obj.style.width="100px";
		obj.style.height="100px";
	}
</script>

运算符:

	比较运算符: > >= < <=
	若两边都是数字 和java一样
	若一般为数字,另一边为字符串形式的数字,将字符串形式的数字转换成数字在进行比较   3>"2"
	若一般为数字,另一边为字符串,返回一个false   3>"hello"
	两边都是字符串的时候,比较ascii
等性运算符 == ===
	== :只判断值是否相同
	===:不仅判断是否相同,还要判断类型是否相同
语句:
	if语句 和java一样
	for while 语句和java一样
	switch 和java一样(区别,switch 后面跟字符串. 还可以跟变量)

定时器:

var id=setInterVal(code,毫秒数):每隔指定的毫秒数执行一次函数 周期
var id=setTimeout(code,毫秒数):延迟指定的毫秒数之后 只执行一次函数

清除定时器:
	clearInterval(id);
	claerTimeout(id);
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body onload="init()">
		<span id="span1"></span>
	</body>
</html>
<script>
	var s="我们的明天更加美好!";
	var obj;
	function init(){
		obj=document.getElementById("span1");
		setInterval(changeSpan,500);
	}
	var i=0;
	function changeSpan(){
		i++;
		obj.innerHTML=s.substring(0,i);
		if(i==10){
			i=0;
		}
	}
</script>

history

back();后退
forward():向前
★go(int)
	go(-1) 相当于 back()
	go(1) 相当于 forward()
<input type="button" onclick="forw()"  value="下一页" />
<script>
	function forw(){
		window.history.go(1);
	}
</script>

location

window.location.href='../history/a.html';

window

* js的bom对象
	** navigator、screen、location、history
	** window:是顶层对象,代表一个窗口
	*** alert、setInterval、setTimeout
window对象详解:
	如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,
	并为每个框架创建一个额外的 window 对象。
	常用的属性:
		通过window可以获取其他的四个对象
			window.location 等价域 location
			window.history 等价于 history
			...
	常用的方法
		消息框
			alert("...."):警告框
			confirm("你确定要删除吗?"):确定框 返回值:boolean
			prompt("请输入您的姓名"):输入框 返回值:你输入的内容
		定时器
			设置定时器
				setInterval(code,毫秒数):周期执行
				setTimeout(code,毫秒数):延迟多长事件后 只执行一次.
				
				例如:
					setInterval(showAd,4000);
					serInterval("showAd()",4000);
			
			清除定时器
				clearInterval(id):
				clearTimeout(id):
		打开和关闭
			open(url):打开
			close():关闭
<input type="button" onclick="closeCurrent()" value="关闭次页面"/>
<input type="button" onclick="openC()" value="打开C页面" />
<script>
	// 方法名不能直接用  open() close(), 否则会与window的open() close()冲突,导致方法失效
	function closeCurrent(){
		window.close();
	}
	function openC(){
		window.open('../location/c.html');
	}
</script>

消息框

function init(){
	alert(1);
	
	var result = window.confirm("是否删除该记录");
	alert(result);
	
	var result = window.prompt("请输入密码","123456");
	if(null==result){
		alert("你没有输入密码");
	}else{
		alert(result);
	}
}

常见事件

常见的事件:
	焦点事件:★
		onfocus
		onblur
	表单事件:★
		onsubmit
		onchange 改变
	页面加载事件:★
		onload
	
	鼠标事件(掌握)
		onclick
	鼠标事件(了解)
		ondblclick:双击
		onmousedown:按下
		onmouserup:弹起
		onmousemove:移动
		onmouserover:悬停
		onmouserout:移出
	键盘事件(理解)
		onkeydown:按下
		onkeyup:弹起
		onkeypress:按住
function f2(event){
	var event=event || window.event;
	//阻止浏览器的默认行为; onclic在href前面执行
	event.preventDefault();
}
function f1(event){
	var event=event || window.event;
	//阻止浏览的传播行为
	event.stopPropagation();
}

止浏览的传播行为:正常情况下,大框套小框,如果我们点击了小框,那么大框也会收到点击事件。 但是如果我们阻止了事件的传播行为,那么大框就感觉不到点击了。stopPropagation()
在这里插入图片描述

js的全局函数

* 这些函数不属于任何的一个对象,使用使用不需要写任何的对象,直接写函数名称
= eval():把字符串当成js代码来执行
	== var str = "alert('aaaa');";
	//alert(str);
	eval(str);

= encodeURI():对字符串编码
= decodeURI():对编码之后的字符串进行解码
** 在传递参数的过程中,如果参数中包含中文,中文会有乱码问题
*** 解决方式:首先对中文进行编码,获取数据时候在对编码之后的内容进行解码
	== var encode1 = "abc123东方不败";
	var e1 = encodeURI(encode1);
	document.write(e1);
	document.write("<hr/>");
	//decodeURI():对编码之后的字符串进行解码
	var d1 = decodeURI(e1);
	document.write(d1);


= isNaN():判断是否是一个数字
	== var s = "aa";
	//如果是数字返回 false;如果不是数字返回 true
	alert(isNaN(s)); 


= parseInt():把字符串转化成number类型
	== var a1 = "10";
	document.write(a1+1);
	document.write("<hr/>");
	document.write(parseInt(a1)+1);

案例

案例一表单校验

在这里插入图片描述

<form action="#" method="post" onsubmit="return checkForm()">
	<table width="50%" height="400px" align="center" border="1">
		<tr>
			<td>用户名:</td>
			<td>
				<input type="text" name="username" id="username" onblur="loseFocus(this)"/>
				<span id="username_msg"></span>
			</td>
		</tr>
		<tr >
			<td>密码:</td>
			<td>
				<input type="password" name="password" id="password"/> 
				
			</td>
		</tr>
		<tr>
			<td>确认密码:</td>
			<td>
				<input type="password" name="password2" id="password2"/> 
				<span id="password_msg"></span>
			</td>
		</tr>
	</table>
	<input type="submit" />
</form>
<script>
	function loseFocus(obj){
		var username = obj.value;
		if(null==username || username==''){
			var username_msg=document.getElementById("username_msg");
			username_msg.innerHTML='<font color="red" size="4" >用户名不能为空</font>';
		}
	}
	
	function checkForm(){
		var flag=true;
		//用户名不能为空
		var username=document.getElementById("username").value;
		if(null==username || username==''){
			var username_msg=document.getElementById("username_msg");
			username_msg.innerHTML='<font color="red" size="4" >用户名不能为空</font>';
			flag=false;
		}
			
		//密码是否相等
		var password=document.getElementById("password").value;
		var password2=document.getElementById("password2").value;
		if(null==password || password==''){
			var password_msg=document.getElementById("password_msg");
			password_msg.innerHTML='<font color="red" size="4" >密码不能为空</font>';
			flag=false;
		}else if(password!=password2){
			var password_msg=document.getElementById("password_msg");
			password_msg.innerHTML='<font color="red" size="4" >密码必须相同</font>';
			flag=false;
		}
		
		return flag;
	}
</script>
为什么checkForm()返回了false,页面还是跳转了?
原因: 1 checkForm()里面没有返回false,或者
       2 调用checkForm()的地方有问题(漏了单词return)

案例二 隔行换色

	table>style>border表示table的边框
	table>border表示单元格的边框
	getElementsByTagName:查找同一种标签
    getElementByName: 查找name相同的标签

在这里插入图片描述

<table style="border: 1px solid red;width: 60%;height: 40%;" cellspacing="0" cellpadding="10px" border="1">
	<tr>
		<td>分类ID</td>
		<td>分类名称</td>
		<td>分类描述</td>
		<td>操作</td>
	</tr>
	<tr>
		<td>1</td>
		<td>手机数码</td>
		<td>手机数码类商品</td>
		<td>修改|删除</td>
	</tr>
	<tr>
		<td>2</td>
		<td>电脑办公</td>
		<td>电脑办公类商品</td>
		<td>修改|删除</td>
	</tr>
	<tr>
		<td>3</td>
		<td>家居饰品</td>
		<td>鞋靴箱包类商品</td>
		<td>修改|删除</td>
	</tr>
	<tr>
		<td>4</td>
		<td>鞋靴箱包</td>
		<td>家居饰品类商品</td>
		<td>修改|删除</td>
	</tr>
</table>
<script>
	window.onload=function(){
		var trs=document.getElementsByTagName("tr");
		for (var i=1;i<trs.length;i++) {
			if(i%2==0){
				trs[i].style.backgroundColor='blue';
			}else{
				trs[i].style.backgroundColor='yellow';
			}
		}
	}
</script>

案例三 全选或全不选

全选和全不选: 获取当前的checked状态,给下面的checkbox赋值
在这里插入图片描述

<table style="border: 1px solid red;width: 60%;height: 40%;" cellspacing="0" cellpadding="10px" border="1">
	<tr>
		<td><input type="checkbox" onclick="selectAll(this)" >全选</input></td>
		<td>分类ID</td>
		<td>分类名称</td>
		<td>分类描述</td>
		<td>操作</td>
	</tr>
	<tr>
		<td><input type="checkbox" class="classItem" /></td>
		<td>1</td>
		<td>手机数码</td>
		<td>手机数码类商品</td>
		<td>修改|删除</td>
	</tr>
	<tr>
		<td><input type="checkbox" class="classItem" /></td>
		<td>2</td>
		<td>电脑办公</td>
		<td>电脑办公类商品</td>
		<td>修改|删除</td>
	</tr>
	<tr>
		<td><input type="checkbox" class="classItem" /></td>
		<td>3</td>
		<td>家居饰品</td>
		<td>鞋靴箱包类商品</td>
		<td>修改|删除</td>
	</tr>
</table>

<script>
	function selectAll(obj){
		var state=obj.checked;
		var items=document.getElementsByClassName("classItem");
		for(var i=0;i<items.length;i++){
			items[i].checked=state;
		}
	}

案例四 省市联动

数组:

语法:
	new Array();//长度为0
	new Array(size);//指定长度的
	new Array(e1,e2..);//指定元素
	非官方
		var arr4=["aa","bb"];
常用属性:
	length
注意:
	数组是可变的
	数组可以存放任意值
常用方法:(了解)
	存放值:对内容的操作
		pop():弹	最后一个
		push():插入 到最后
		
		shift():删除第一个
		unshift():插入到首位
	打印数组:
		join(分隔符):将数组里的元素按照指定的分隔符打印
	拼接数组:
		concat():连接两个或更多的数组,并返回结果。
	对结构的操作:
		sort();排序
		reverse();反转

concat(xx)+join(xx)产生了新的数组,原数组没变化
reverse() sort() 原数组产生了变化
籍贯:<select id="province"></select>
    <select id="city"></select>
<script>
	var arr=new Array();
	 arr[0]=new Array("广东省","江苏省","山东省");
	 arr[1]=new Array("广州","深证","珠海");
	 arr[2]=new Array("苏州","南京","常州");
	 arr[3]=new Array("济南","青岛","烟台");
	window.onload=function(){
		var province = document.getElementById("province");
		var proArr=arr[0];
		province.innerHTML="<option >-请选择-</option>";
		for (var i = 0; i < arr[0].length; i++) {
			var node="<option value='"+i+"'>"+arr[0][i]+"</option>";
			province.innerHTML+=node;
		}
		
		var city = document.getElementById("city");
		city.innerHTML="<option >-请选择-</option>";
		province.onchange=function(){
			var j=parseInt(this.value)+1;
			var cityArr=arr[j];
			//初始化
			city.innerHTML="";
			for (var i = 0; i < cityArr.length; i++) {
				var node="<option value='"+i+"'>"+cityArr[i]+"</option>";
				city.innerHTML+=node;
			}
		}
	}
</script>

案例五 左右选中

在这里插入图片描述

<table>
	<tr>
		<td>
			<select id="leftSelect" multiple="multiple" size="10" style="width: 100px;height: 200px;"></select>
		</td>
		<td>
			<input type="button" onclick="toRight()" value=">"/><br>
			<input type="button" onclick="toRights()" value=">>"/><br>
			<input type="button" onclick="toRightAll()" value=">>>"/><br>
			<br><br>
			<input type="button" onclick="toLeft()" value="<"/><br>
			<input type="button" onclick="toLefts()" value="<<"/><br>
			<input type="button" onclick="toLeftAll()" value="<<<"/><br>
		</td>
		<td>
			<select id="rightSelect" multiple="multiple" size="10" style="width: 100px;height: 200px;"></select>
		</td>
	</tr>
</table>
<script>
	var leftSelect=document.getElementById("leftSelect");
	var rightSelect=document.getElementById("rightSelect");
	window.onload=function(){
		//左侧select赋值
		var leftArr=["赵","钱","孙","李","周","吴","郑","王"];
		leftArr.forEach(function(item,index){
			var option="<option>"+item+"</option>";
			leftSelect.innerHTML+=option;
		});
	}
	function toRight(){
		var leftOptions=leftSelect.options;
		for (var i = 0; i < leftOptions.length; i++) {
			if(leftOptions[i].selected){
				rightSelect.appendChild(leftOptions[i]);
				break;
			}
		}
	}
	function toRights(){
		var leftOptions=leftSelect.options;
		for (var i = 0; i < leftOptions.length; i++) {
			if(leftOptions[i].selected){
				rightSelect.appendChild(leftOptions[i]);
				i--;
			}
		}
	}
	function toRightAll(){
		var leftOptions=leftSelect.options;
		for (var i = 0; i < leftOptions.length;) {
			rightSelect.appendChild(leftOptions[i]);
		}
	}
</script>

为什么下面的方法会报错undefined is not a function?

forEach()是给数组用的,leftOptions 不是Array,是 HTMLOptionsCollection,所以会报错undefined is not a function
js用forEach() ;  jquery用each()(js对象用each()会报错undefined is not a function) 
leftOptions.forEach(function(item){
	if(item.selected){
		rightSelect.appendChild(item);
		return;
	}
});

leftOptions.each(function(item){
	rightSelect.appendChild(item);
});

引用类型

引用类型总结:
	原始类型中的String Number Boolean都是伪对象,可以调用相应的方法
	Array:数组
	String:
		语法:
			new String(值|变量);//返回一个对象
			String(值|变量);//返回原始类型
		常用方法:
			substring(start,end):[start,end)
			substr(start,size):从索引为指定的值开始向后截取几个
		
		charAt(index):返回在指定位置的字符。
		indexOf(""):返回字符串所在索引
		
		replace():替换
		split():切割
		
	常用属性:length	
Boolean:
	语法:
		new Boolean(值|变量);
		Boolean(值|变量);
		非0数字 非空字符串 非空对象 转成true
Number
	语法:
		new Number(值|变量);
		Number(值|变量);
	注意:
	
		null====>0 
		fale====>0 true====>1
		字符串的数字=====>对应的数字
		其他的NaN
Date:
	new Date();
	常用方法:
		toLocalString()
RegExp:正则表达式
	语法:
		直接量语法  /正则表达式/参数
		直接量语法  /正则表达式/
		
		new RegExp("正则表达式")
		new RegExp("正则表达式","参数") 
		参数:
			i:忽略大小写
			g:全局
		常用方法:
			test() :返回值为boolean
Math:
	Math.常量|方法
	Math.PI
	Math.random()  [0,1)
	
全局:
	★
	decodeURI() 解码某个编码的 URI。 
	encodeURI() 把字符串编码为 URI。

	Number():强制转换成数字
	String():转成字符串
	
	parseInt():尝试转换成整数
	parseFloat():尝试转换成小数
	
	eval() 计算 JavaScript 字符串,并把它作为脚本代码来执行。 

demo: https://codechina.csdn.net/javaweb1/javascriptdemo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值