JavaScript入門(mén)1
今日內(nèi)容介紹
使用JS完成簡(jiǎn)單的數(shù)據(jù)校驗(yàn)
使用JS完成圖片輪播效果
使用JS完成頁(yè)面定時(shí)彈出廣告
今日內(nèi)容學(xué)習(xí)目標(biāo)
掌握J(rèn)avaScript的基本語(yǔ)法
掌握J(rèn)avaScript的對(duì)象獲取
掌握J(rèn)avaScript標(biāo)簽的基本操作
使用JS可以獲得指定元素
使用JS可以對(duì)指定元素的樣式進(jìn)行操作(獲得或修改)
使用JS可以編寫(xiě)定時(shí)程序
第1章 案例:使用JS完成注冊(cè)頁(yè)面的校驗(yàn)
1.1 案例介紹
用戶(hù)在提交表單時(shí),需要對(duì)用戶(hù)的填寫(xiě)的數(shù)據(jù)進(jìn)行校驗(yàn)。本案例只對(duì)用戶(hù)名、密碼、確認(rèn)密碼和郵箱進(jìn)行校驗(yàn)。
1.2 相關(guān)知識(shí)點(diǎn):
1.2.1 JavaScript的概述
1.2.1.1 什么是JavaScript
JavaScript是web上一種功能強(qiáng)大的編程語(yǔ)言,用于開(kāi)發(fā)交互式的web頁(yè)面。它不需要進(jìn)行編譯,而是直接嵌入在HTML頁(yè)面中,由瀏覽器執(zhí)行。
JavaScript 被設(shè)計(jì)用來(lái)向 HTML 頁(yè)面添加交互行為。
JavaScript 是一種腳本語(yǔ)言(腳本語(yǔ)言是一種輕量級(jí)的編程語(yǔ)言)。
JavaScript 由數(shù)行可執(zhí)行計(jì)算機(jī)代碼組成。
JavaScript 通常被直接嵌入 HTML 頁(yè)面。
JavaScript 是一種解釋性語(yǔ)言(就是說(shuō),代碼執(zhí)行不進(jìn)行預(yù)編譯)。
JavaScript的組成:
ECMAScript:語(yǔ)法,語(yǔ)句.
BOM:瀏覽器對(duì)象
DOM:Document Object Model.操作文檔中的元素和內(nèi)容.
1.2.1.2 JavaScript的作用
使用JavaScript添加頁(yè)面動(dòng)畫(huà)效果,提供用戶(hù)操作體驗(yàn)。主要應(yīng)用有:嵌入動(dòng)態(tài)文本于HTML頁(yè)面、對(duì)瀏覽器事件做出響應(yīng)、讀寫(xiě)HTML元素、驗(yàn)證提交數(shù)據(jù)、檢測(cè)訪客的瀏覽器信息等。
1.2.1.3 JavaScript的引入
在HTML文件中引入JavaScript有兩種方式,一種是在HTML文檔直接嵌入JavaScript腳本,稱(chēng)為內(nèi)嵌式,另一種是鏈接外部JavaScript腳本文件,稱(chēng)為外聯(lián)式。對(duì)他們的具體講解如下:
1) 內(nèi)嵌式,在HTML文檔中,通過(guò)<script>標(biāo)簽引入,如下
<script type="text/javascript">
//此處為JavaScript代碼
</script>
2) 外聯(lián)式,在HTML文檔中,通過(guò)<script src=””>標(biāo)簽引入.js文件,如下:
<script src="1.js" type="text/javascript" charset="utf-8"></script>
1.2.2 基本語(yǔ)法
1.2.2.1 變量
1) 在使用JavaScript時(shí),需要遵循以下命名規(guī)范:
必須以字母或下劃線開(kāi)頭,中間可以是數(shù)字、字符或下劃線
變量名不能包含空格等符號(hào)
不能使用JavaScript關(guān)鍵字作為變量名,如:function
JavaScript嚴(yán)格區(qū)分大小寫(xiě)。
2) 變量的聲明
var 變量名; //JavaScript變量可以不聲明,直接使用。默認(rèn)值:undefined
3) 變量的賦值
var 變量名 = 值; //JavaScript變量是弱類(lèi)型,及同一個(gè)變量可以存放不同類(lèi)型的數(shù)據(jù)
1.2.2.2 數(shù)據(jù)類(lèi)型
【基本類(lèi)型】
Undefined ,Undefined 類(lèi)型只有一個(gè)值,即 undefined。當(dāng)聲明的變量未初始化時(shí),該變量的默認(rèn)值是 undefined。
Null ,只有一個(gè)專(zhuān)用值 null,表示空,一個(gè)占位符。值 undefined 實(shí)際上是從值 null 派生來(lái)的,因此 ECMAScript 把它們定義為相等的。
alert(null == undefined); //輸出 "true",盡管這兩個(gè)值相等,但它們的含義不同。
Boolean,有兩個(gè)值 true 和 false
Number,表示任意數(shù)字
String,字符串由雙引號(hào)(")或單引號(hào)(')聲明的。JavaScript 沒(méi)有字符類(lèi)型
【引用類(lèi)型】
引用類(lèi)型通常叫做類(lèi)(class),也就是說(shuō),遇到引用值,所處理的就是對(duì)象。
JavaScript是基于對(duì)象而不是面向?qū)ο?。?duì)象類(lèi)型的默認(rèn)值是null.
JavaScript提供眾多預(yù)定義引用類(lèi)型(內(nèi)置對(duì)象)。
1.2.2.3 運(yùn)算符
JavaScript運(yùn)算符與Java運(yùn)算符基本一致。
算術(shù)運(yùn)算符
賦值運(yùn)算符
比較運(yùn)算符
邏輯運(yùn)算符
1.2.2.4 運(yùn)算符操作
JavaScript規(guī)范規(guī)定以下操作規(guī)則(了解)
Boolean運(yùn)算
等性運(yùn)算
1.2.2.5 基本操作
alert() :向頁(yè)面中彈出一個(gè)提示框??!
innerHTML :向頁(yè)面的某個(gè)元素中寫(xiě)一段內(nèi)容,將原有的東西覆蓋
1.3 案例分析
1.4 案例實(shí)現(xiàn)
步驟1:表單<form> 添加提交事件
步驟2:編寫(xiě)check()函數(shù),進(jìn)行校驗(yàn)
<script type="text/javascript">
function check(){
//1 用戶(hù)名
var loginName = document.getElementById("loginnameId").value;
if(loginName == ""){
alert("用戶(hù)名不能為空");
return false;
}
//2 密碼
var loginpwd = document.getElementById("loginpwdId").value;
if(loginpwd == ""){
alert("密碼不能為空");
return false;
}
//3 確認(rèn)密碼
var reloginpwd = document.getElementById("reloginpwdId").value;
if(reloginpwd != loginpwd){
alert("密碼和確認(rèn)密碼不一致");
return false;
}
//4 郵箱
var email = document.getElementById("emailId").value;
if(! /^([0-9a-zA-Z_-])+@([0-9a-zA-Z_-])+(\.[0-9a-zA-Z]+)$/.test(email)){
alert("郵箱格式不正確");
document.getElementById("emailId").focus(); //提示信息之后獲得焦點(diǎn)
return false;
}
return true;
}
</script>
1.5 案例總結(jié)
1.5.1 JS中正則匹配的方式:
正則的匹配:
JS中有兩種匹配正則的方式:
* 使用String對(duì)象中的match方法.
* 使用正則對(duì)象中的test方法.
1.5.2 JS中的函數(shù)編寫(xiě)方式:
函數(shù):實(shí)現(xiàn)一定功能的代碼塊,類(lèi)似與Java中的方法。關(guān)鍵字function,函數(shù)名自定義。
<script type="text/javascript">
//方式1:聲明函數(shù)
function demo01(){
alert("案例1");
}
// 方式1:調(diào)用函數(shù)
demo01();
//方式2:聲明匿名函數(shù)
var demo02 = function(){
alert("案例2");
};
//方式2:調(diào)用函數(shù)
demo02();
</script>
第2章 案例:輪播圖
2.1 案例需求
第一天完成首頁(yè)中,“輪播圖”只提供一張圖片進(jìn)行顯示?,F(xiàn)需要編寫(xiě)程序,完成自動(dòng)切換圖片功能。
2.2 相關(guān)知識(shí)點(diǎn):定時(shí)器setInterval
window.setInterval(code, millisec) 按照指定的周期(間隔)來(lái)執(zhí)行函數(shù)或代碼片段。
參數(shù)1: code 必需。執(zhí)行的函數(shù)名或執(zhí)行的代碼字符串。
參數(shù)2:millisec 必須。時(shí)間間隔,單位:毫秒。
返回值:一個(gè)可以傳遞給 window.clearInterval() 從而取消對(duì) code 的周期性執(zhí)行的值。
例如:
* 方式1:函數(shù)名 , setInterval(show , 100);
* 方式2:函數(shù)字符串, setInterval("show()" , 100);
window對(duì)象提供都是全局函數(shù),調(diào)用函數(shù)時(shí)window可以省略。
window.setInterval() 等效 setInterval()
2.3 案例分析
1. 編寫(xiě)html頁(yè)面,為頁(yè)面設(shè)置加載事件onload
2. 編寫(xiě)事件觸發(fā)函數(shù)
3. 獲得輪播圖圖片
4. 開(kāi)啟定時(shí)器,2000毫秒重新設(shè)置圖片的src屬性
2.4 案例實(shí)現(xiàn)
步驟1:為輪播圖img標(biāo)簽添加id屬性
步驟2:編寫(xiě)js代碼,頁(yè)面加載觸發(fā)指定函數(shù)
<script type="text/javascript">
// 加載成功啟動(dòng)監(jiān)聽(tīng)器,5秒執(zhí)行一次
window.onload = function () {
setInterval(changeImage , 5000);
}
//在3張照片之間切換
var num = 1 ;
function changeImage(){
if(num >= 3){
num = 1;
}
var imageObj = document.getElementById("imgId");
imageObj.src = "../img/"+ ++num +".jpg";
}
</script>
第3章 案例:定時(shí)彈廣告
3.1 案例需求
在平日瀏覽網(wǎng)頁(yè)時(shí),頁(yè)面一打開(kāi)5秒后顯示廣告,然后5秒后再隱藏廣告。
3.2 相關(guān)知識(shí)點(diǎn)
3.2.1 JavaScript定時(shí)器:setTimeout
setTimeout() 在指定的毫秒數(shù)后調(diào)用函數(shù)或執(zhí)行代碼片段。
setTimeout(code,millisec)
code 必需。要調(diào)用的函數(shù)或要執(zhí)行的代碼字符串。
millisec 必需。在執(zhí)行代碼前需等待的毫秒數(shù)。
setInterval() 以指定周期執(zhí)行函數(shù)或代碼片段。(上一個(gè)案例已經(jīng)講解)
clearInterval() 取消由 setInterval() 設(shè)置的 timeout。
clearTimeout() 取消由 setTimeout() 方法設(shè)置的 timeout。(本案例不使用,此處一并講解)
3.2.2 JavaScript樣式獲得或修改
獲得或設(shè)置樣式
obj.style.屬性 ,獲得指定“屬性”的值。
obj.style.屬性=值 ,給指定“屬性”設(shè)置內(nèi)容。
如果屬性由多個(gè)單詞使用“-”連接,需要將“-”刪除,并將后一個(gè)單詞首字母大寫(xiě)。
例如:background-color 需要改成 backgroundColor
實(shí)例:
<div id="divId" style="height:100px;width:100px;margin:10px;padding:20px"></div>
<script type="text/javascript">
//1 獲得div對(duì)象
var divObj = document.getElementById("divId");
//2 獲得高度
// * divObj.style.height 數(shù)據(jù)為"100px"
// * 使用parseInt() ,將字符串“100px”轉(zhuǎn)換成數(shù)字“100”
var height = window.parseInt(divObj.style.height);
//3 將原始高度翻倍,再設(shè)置給div。
// * 注意:必須添加單位,否則無(wú)效
divObj.style.height = height * 2 + "px";
</script>
3.3 案例分析
1. 頁(yè)面加載成功后觸發(fā)onload()事件
2. 加載成功后,觸發(fā)延遲定時(shí)器,5秒后,開(kāi)始顯示廣告。
3. 顯示廣告開(kāi)始后,5秒后再次隱藏廣告
3.4 案例實(shí)現(xiàn)
步驟1:在頁(yè)面中,添加廣告位div,并設(shè)置頁(yè)面加載事件
<body onload="init()">
<!-- 整體的DIV -->
<div>
<!-- 定時(shí)彈出廣告的div -->
<div id="divAd" style="width:99%;display: none;">
<img src="../img/f001a62f-a49d-4a4d-b56f-2b6908a0002c_g.jpg" width="100%"/>
</div> ….
步驟2:編程JS實(shí)現(xiàn)
<!—在html頁(yè)面中引入js文件-->
<script src="ad.js"></script>
<!—ad.js內(nèi)容如下-->
var time;
function init(){
// 設(shè)置定時(shí)操作:
time = setInterval("showAd()",5000);
}
function showAd(){
// 獲得div元素
var divAd = document.getElementById("divAd");
divAd.style.display = "block";
// 清除之前的定時(shí)操作:
clearInterval(time);
// 重新設(shè)置一個(gè)定時(shí):5秒鐘隱藏:
time = setInterval("hideAd()",5000);
}
function hideAd(){
// 獲得div元素
var divAd = document.getElementById("divAd");
divAd.style.display="none";
clearInterval(time);
}
3.5 總結(jié):BOM(Browser Object Mode)
3.5.1 BOM :Window對(duì)象(掌握)
方法:定時(shí)器
函數(shù)名
描述
setInterval()
按照指定的周期(以毫秒計(jì))來(lái)調(diào)用函數(shù)或計(jì)算表達(dá)式
clearInterval()
取消由 setInterval() 設(shè)置的 timeout。
setTimeout()
在指定的毫秒數(shù)后調(diào)用函數(shù)或計(jì)算表達(dá)式。
clearTimeout()
取消由 setTimeout() 方法設(shè)置的 timeout
方法:消息框
函數(shù)名
描述
alert()
顯示帶有一段消息和一個(gè)確認(rèn)按鈕的警告框。
confirm()
顯示帶有一段消息以及確認(rèn)按鈕和取消按鈕的確認(rèn)框。
確認(rèn)框:
確定返回true
取消返回false
prompt()
顯示可提示用戶(hù)輸入的提示框。
點(diǎn)擊確定獲得用戶(hù)輸入數(shù)據(jù)
3.5.2 BOM :Location對(duì)象
href屬性:設(shè)置或返回完整的 URL。
<script type="text/javascript">
function change(){
location.;
}
</script>
<input type="button" value="點(diǎn)我" onclick="change()"/>
3.5.3 BOM :History對(duì)象(了解)
go() 方法:跳轉(zhuǎn)到指定頁(yè)面
a) go(-1) 加載前一個(gè)連接,等效back()
b) go(1) 加載后一個(gè)鏈接,等效forward()
JavaScript入門(mén)1—事件
3.6 總結(jié):事件
常見(jiàn)事件
事件名
描述
onload
某個(gè)頁(yè)面或圖像被完成加載
onsubmit
提交按鈕被點(diǎn)擊
onclick
鼠標(biāo)點(diǎn)擊某個(gè)對(duì)象
ondblclick
鼠標(biāo)雙擊某個(gè)對(duì)象
onblur
元素失去焦點(diǎn)
onfocus
元素獲得焦點(diǎn)
onchange
用戶(hù)改變域的內(nèi)容
onkeydown
某個(gè)鍵盤(pán)的鍵被按下
onkeypress
某個(gè)鍵盤(pán)的鍵被按下或按住
onkeyup
某個(gè)鍵盤(pán)的鍵被松開(kāi)
onmousedown
某個(gè)鼠標(biāo)按鍵被按下
onmouseup
某個(gè)鼠標(biāo)按鍵被松開(kāi)
onmouseover
鼠標(biāo)被移到某元素之上
onmouseout
鼠標(biāo)從某元素移開(kāi)
onmousemove
鼠標(biāo)被移動(dòng)
參考:
HTML代碼
<input id="e01" type="text" /><span id="textMsg"></span> <br/>
<hr/>
<div id="e02" ></div><span id="divMsg"></span> <br/>
<hr/>
<input id="e03" type="button" value="可以點(diǎn)擊"/><span id="buttonMsg"></span> <br/>
JavaScript代碼
<script type="text/javascript">
// 頁(yè)面加載事件:當(dāng)整個(gè)html頁(yè)面加載成功調(diào)用
window.onload = function(){
// 文本框事件
var e01 = document.getElementById("e01");
e01.onfocus = function(){
html("textMsg","文本框獲得焦點(diǎn):focus");
}
e01.onblur = function(){
html("textMsg","文本框失去焦點(diǎn):blur");
}
e01.onkeydown = function(){
html("textMsg","鍵盤(pán)按下:keydown");
}
e01.onkeypress = function(){
append("textMsg","鍵盤(pán)按:keypress");
}
e01.onkeyup = function(){
append("textMsg","鍵盤(pán)彈起:keyup");
}
// 鼠標(biāo)事件
var e02 = document.getElementById("e02");
var i = 0;
e02.onmouseover = function(){
html("divMsg","鼠標(biāo)移上:mouseover");
}
e02.onmousemove = function(){
//html("divMsg","鼠標(biāo)移動(dòng):mousemove , " + i++);
}
e02.onmouseout = function(){
html("divMsg","鼠標(biāo)移出:mouseout");
}
e02.onmousedown = function(){
html("divMsg","鼠標(biāo)按下:mousedown");
}
e02.onmouseup = function(){
html("divMsg","鼠標(biāo)彈起:mouseup");
}
// 按鈕事件
var e03 = document.getElementById("e03");
e03.onclick = function () {
html("buttonMsg","單擊:click");
}
e03.ondblclick= function () {
html("buttonMsg","雙擊:dblclick");
}
};
/**
* 指定位置顯示指定信息
* @param objId ,元素的id屬性值
* @param text,需要顯示文本信息
*/
function html(objId,text){
document.getElementById(objId).innerHTML = text;
}
/**
* 指定位置追加指定信息
* @param objId ,元素的id屬性值
* @param text,需要顯示文本信息
*/
function append(objId,text){
document.getElementById(objId).innerHTML += text;
}
</script>
event屬性
屬性名
描述
clientX
返回當(dāng)事件被觸發(fā)時(shí),鼠標(biāo)指針的水平坐標(biāo)。
clientY
返回當(dāng)事件被觸發(fā)時(shí),鼠標(biāo)指針的垂直坐標(biāo)。
keyCode
返回當(dāng)事件被觸發(fā)時(shí),鍵盤(pán)輸入ASCII碼
event方法:
方法名
描述
preventDefault()
阻止瀏覽器默認(rèn)行為
stopPropagation()
阻止事件的傳播
阻止瀏覽器默認(rèn)行為
<a onclick="one()">百度</a><br/>
<a onclick="return two()">Java幫幫</a><br/>
<script type="text/javascript">
function one(){
alert("我之后,百度繼續(xù)訪問(wèn)");
}
function two(event){
alert("我之后,Java幫幫不再訪問(wèn)");
//方式1:
//return false;
//方式2:
var event = event || window.event;
event.preventDefault();
}
</script>
阻止事件的傳播
<!--區(qū)域1-->
<div id="e1" style="width:200px ; height: 200px; background-color: #f00;">
<div id="e2" style="width:100px ; height: 100px; background-color: #0f0;"></div>
</div>
<hr />
<!--區(qū)域2-->
<div id="e3" style="width:200px ; height: 200px; background-color: #f00;">
<div id="e4" style="width:100px ; height: 100px; background-color: #0f0;"></div>
</div>
<script type="text/javascript">
var e1 = document.getElementById("e1");
var e2 = document.getElementById("e2");
var e3 = document.getElementById("e3");
var e4 = document.getElementById("e4");
//設(shè)置“區(qū)域1”事件
e1.onclick = function(){
alert("e1");
}
e2.onclick = function(){
alert("e2,同時(shí)e1也觸發(fā)");
}
//設(shè)置“區(qū)域2”事件
e3.onclick = function(){
alert("e3");
}
e4.onclick = function(event){
alert("e4,e3不觸發(fā)");
var event = event || window.event;
event.stopPropagation();
}
</script>
JavaScript入門(mén)2
今日內(nèi)容介紹
使用JS完成表單校驗(yàn)
使用JS完成表格的隔行換色
使用JS完成復(fù)選框的全選效果
使用JS完成省市聯(lián)動(dòng)效果
今日內(nèi)容學(xué)習(xí)目標(biāo)
使用JS可以編寫(xiě)各種事件
使用JS可以獲得指定元素
使用JS可以創(chuàng)建元素
使用JS可以對(duì)元素的屬性進(jìn)行操作
使用JS可以對(duì)元素的標(biāo)簽體進(jìn)行操作
使用JS可以對(duì)指定元素的樣式進(jìn)行操作(獲得或修改)
第4章 案例:完善注冊(cè)表單校驗(yàn)
4.1 案例介紹
昨天我們已經(jīng)完成了表單數(shù)據(jù)校驗(yàn),整個(gè)實(shí)現(xiàn)過(guò)程存在兩處不足的地方:
1. 使用彈出框進(jìn)行提示,用戶(hù)體驗(yàn)不友好,可以將錯(cuò)誤提示信息現(xiàn)在在對(duì)應(yīng)的表單元素后面
2. 在編寫(xiě)程序時(shí)存在多處重復(fù)代碼,為了達(dá)到代碼的重復(fù)利用,將進(jìn)行內(nèi)容抽取成,編寫(xiě)自定義函數(shù)。
4.2 相關(guān)知識(shí)點(diǎn)
4.2.1 標(biāo)簽體內(nèi)容:innerHTML
innerHTML - HTML 元素的內(nèi)部文本
獲得:document.getElementById(“divId”).innerHTML
設(shè)置:document.getElementById(“divId”).innerHTML = "...."
4.2.2 相關(guān)事件
常見(jiàn)事件
事件名
描述
onsubmit
提交按鈕被點(diǎn)擊
onblur
元素失去焦點(diǎn)
onfocus
元素獲得焦點(diǎn)
4.3 案例分析
1. 校驗(yàn)不通過(guò),在當(dāng)前標(biāo)簽后面,紅色字體提示
2. 對(duì)所有需要校驗(yàn)的表單項(xiàng)進(jìn)行全部校驗(yàn)
3. 第一個(gè)校驗(yàn)不通過(guò)的元素獲得焦點(diǎn)
編寫(xiě)步驟:
1.添加錯(cuò)誤提示顯示區(qū)域 <span id=”usernamespan”></span>
2.表單元素id屬性
3.校驗(yàn)不同,給span顯示錯(cuò)誤信息
4.第一個(gè)不通過(guò)的獲得焦點(diǎn)
4.4 案例實(shí)現(xiàn)
4.4.1 修改html,添加錯(cuò)誤顯示區(qū)域
<tr>
<td>用戶(hù)名</td>
<td>
<input type="text" id="username" name="username" placeholder="請(qǐng)輸入用戶(hù)名"
onfocus="showTips('username','用戶(hù)名必須是字母或數(shù)字')"
onblur="checkUsername('username','用戶(hù)名不能為空!')"/>
<span id="usernamespan"></span>
</td>
</tr>
<tr>
<td>密碼</td>
<td>
<input type="password" id="password" name="password"
onfocus="showTips('password','密碼長(zhǎng)度必須6位')"
onblur="checkUsername('password','密碼不能為空!')"/>
<span id="passwordspan"></span>
</td>
</tr>
4.4.2 提供JS代碼
<script>
function showTips(uid,info){
// 控制后面的span元素:
document.getElementById(uid+"span").innerHTML ="<font color='gray'>"+info+"</font>";
}
function checkUsername(uid,info){
// 判斷用戶(hù)名是否為""
var uValue = document.getElementById(uid).value;
if(uValue == ""){
document.getElementById(uid+"span").innerHTML ="<font color='red'>"+info+"</font>";
}else{
document.getElementById(uid+"span").innerHTML = "";
}
}
</script>
4.5 總結(jié):事件
常見(jiàn)事件
事件名
描述
onload
某個(gè)頁(yè)面或圖像被完成加載
onsubmit
提交按鈕被點(diǎn)擊
onclick
鼠標(biāo)點(diǎn)擊某個(gè)對(duì)象
ondblclick
鼠標(biāo)雙擊某個(gè)對(duì)象
onblur
元素失去焦點(diǎn)
onfocus
元素獲得焦點(diǎn)
onchange
用戶(hù)改變域的內(nèi)容
onkeydown
某個(gè)鍵盤(pán)的鍵被按下
onkeypress
某個(gè)鍵盤(pán)的鍵被按下或按住
onkeyup
某個(gè)鍵盤(pán)的鍵被松開(kāi)
onmousedown
某個(gè)鼠標(biāo)按鍵被按下
onmouseup
某個(gè)鼠標(biāo)按鍵被松開(kāi)
onmouseover
鼠標(biāo)被移到某元素之上
onmouseout
鼠標(biāo)從某元素移開(kāi)
onmousemove
鼠標(biāo)被移動(dòng)
參考:
HTML代碼
<input id="e01" type="text" /><span id="textMsg"></span> <br/>
<hr/>
<div id="e02" ></div><span id="divMsg"></span> <br/>
<hr/>
<input id="e03" type="button" value="可以點(diǎn)擊"/><span id="buttonMsg"></span> <br/>
JavaScript代碼
<script type="text/javascript">
// 頁(yè)面加載事件:當(dāng)整個(gè)html頁(yè)面加載成功調(diào)用
window.onload = function(){
// 文本框事件
var e01 = document.getElementById("e01");
e01.onfocus = function(){
html("textMsg","文本框獲得焦點(diǎn):focus");
}
e01.onblur = function(){
html("textMsg","文本框失去焦點(diǎn):blur");
}
e01.onkeydown = function(){
html("textMsg","鍵盤(pán)按下:keydown");
}
e01.onkeypress = function(){
append("textMsg","鍵盤(pán)按:keypress");
}
e01.onkeyup = function(){
append("textMsg","鍵盤(pán)彈起:keyup");
}
// 鼠標(biāo)事件
var e02 = document.getElementById("e02");
var i = 0;
e02.onmouseover = function(){
html("divMsg","鼠標(biāo)移上:mouseover");
}
e02.onmousemove = function(){
//html("divMsg","鼠標(biāo)移動(dòng):mousemove , " + i++);
}
e02.onmouseout = function(){
html("divMsg","鼠標(biāo)移出:mouseout");
}
e02.onmousedown = function(){
html("divMsg","鼠標(biāo)按下:mousedown");
}
e02.onmouseup = function(){
html("divMsg","鼠標(biāo)彈起:mouseup");
}
// 按鈕事件
var e03 = document.getElementById("e03");
e03.onclick = function () {
html("buttonMsg","單擊:click");
}
e03.ondblclick= function () {
html("buttonMsg","雙擊:dblclick");
}
};
/**
* 指定位置顯示指定信息
* @param objId ,元素的id屬性值
* @param text,需要顯示文本信息
*/
function html(objId,text){
document.getElementById(objId).innerHTML = text;
}
/**
* 指定位置追加指定信息
* @param objId ,元素的id屬性值
* @param text,需要顯示文本信息
*/
function append(objId,text){
document.getElementById(objId).innerHTML += text;
}
</script>
第5章 案例:表格隔行換色
5.1 案例描述
開(kāi)發(fā)中,需要使用表格陳列數(shù)據(jù),數(shù)據(jù)過(guò)多不易查看,通常使用隔行換色進(jìn)行表示。
5.2 案例相關(guān)JS函數(shù)介紹
5.2.1 相關(guān)JS事件
onload() 頁(yè)面加載成功觸發(fā)
方式1:<body>使用onload屬性確定需要執(zhí)行的函數(shù)
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
//js代碼在<body>之前,不能獲得<body>標(biāo)簽體中的內(nèi)容,還沒(méi)有加載到
var e01 = document.getElementById("e01");
alert(e01); //打?。簄ull
function init () {
//頁(yè)面加載成功之后執(zhí)行
var e02 = document.getElementById("e01");
alert(e02.value); //打?。篔ava幫幫
}
</script>
</head>
<body onload="init()">
<input type="text" name="" id="e01" value="Java幫幫" />
</body>
方式2: 通過(guò)window.onload 設(shè)置匿名函數(shù)
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
window.onload = function () {
//頁(yè)面加載成功之后執(zhí)行
var e02 = document.getElementById("e01");
alert(e02.value); //打?。篔ava幫幫
}
</script>
</head>
<body>
<input type="text" name="" id="e01" value="Java幫幫" />
</body>
5.2.2 this關(guān)鍵字
在函數(shù)內(nèi)部this表示:當(dāng)前操作的元素。
5.3 案例實(shí)現(xiàn)
在提供html頁(yè)面的基礎(chǔ)上,編寫(xiě)js代碼
<script type="text/javascript">
window.onload = function () {
var allTr = document.getElementsByTagName("tr");
// 跳過(guò)前2行
for (var i = 2 ; i < allTr.length ; i ++) {
//給行tr設(shè)置背景顏色,奇數(shù)行白色,偶數(shù)行指定顏色
if(i % 2 == 0){
allTr[i].style.backgroundColor="#FFF";
} else {
allTr[i].style.backgroundColor="#4E7FD1";
}
}
}
</script>
第6章 案例:復(fù)選框全選/全不選
6.1 案例描述
開(kāi)發(fā)中,經(jīng)常需要對(duì)表格數(shù)據(jù)進(jìn)行“批量處理”,就需要快速的對(duì)列表項(xiàng)進(jìn)行操作,本案例我們來(lái)完成“全選和全不選”
6.2 案例相關(guān)的JS屬性介紹
6.2.1 單選/復(fù)選選中
ele.checked 表示元素是否選中,true表示選中,false表示沒(méi)有選中
例如:ele.checked = true; //設(shè)置元素被選中。
6.3 案例實(shí)現(xiàn)
步驟1:給復(fù)選框添加onclick事件
<input type="checkbox" onclick="selectAll(this)" >
步驟2:編寫(xiě)selectAll(this)處理列表項(xiàng)的復(fù)選框是否勾選
<script type="text/javascript">
function selectAll (obj) {
//當(dāng)前復(fù)選框是否選擇,如果選中其他都選中,如果沒(méi)有選中其他都不選中。
// * getElementsByClassName 通過(guò)標(biāo)簽class屬性的名稱(chēng)獲得對(duì)應(yīng)的所有標(biāo)簽。<xx class="">
var allCheckbox = document.getElementsByClassName("itemSelect");
for (var i = 0 ; i < allCheckbox.length ; i ++) {
allCheckbox[i].checked = obj.checked;
}
}
</script>
第7章 案例:省市二級(jí)聯(lián)動(dòng)
7.1 案例介紹
在日常應(yīng)用中,我們需要完善個(gè)人信息,“所在地”要求選擇省市,當(dāng)選擇省時(shí),該省對(duì)應(yīng)的市將自動(dòng)的更新。
7.2 案例相關(guān)的JS函數(shù)
7.2.1 數(shù)組:Array
創(chuàng)建語(yǔ)法
new Array();
new Array(size); // size 數(shù)組元素個(gè)數(shù),數(shù)組成員默認(rèn)值undefined
new Array(element0, element0, ..., elementn); //參數(shù)列表,為數(shù)組初始化數(shù)據(jù)
數(shù)組中的每一個(gè)成員沒(méi)有類(lèi)型限制,及可以存放任意類(lèi)型
數(shù)組的長(zhǎng)度可以自動(dòng)修改,類(lèi)似Java中的List 集合等。
7.2.2 元素操作:createElement、appendChild
document.createElement() 創(chuàng)建元素節(jié)點(diǎn)。
document.createTextNode() 創(chuàng)建文本節(jié)點(diǎn)。
ele.appendChild() 向標(biāo)簽體末尾添加新的子節(jié)點(diǎn)。
實(shí)例:
<!—HTML代碼-->
<div id="divId"></div>
<!—JavaScript代碼-->
<script type="text/javascript">
//1 獲得div對(duì)象(元素--標(biāo)簽)
var divObj = document.getElementById("divId");
//2 創(chuàng)建a元素
// * createElement 創(chuàng)建指定名稱(chēng)的元素
var aObj = document.createElement("a");
//2.1 創(chuàng)建文件
var nodeObj = document.createTextNode("xxx");
// * 將文本添加到a元素
aObj.appendChild(nodeObj);
//2.2 給a元素設(shè)置屬性
// setAttribute(name,value) 給指定的元素設(shè)置屬性,name屬性名,value屬性值
aObj.setAttribute("href","http://www.javahelp.com.cn");
//3 將新創(chuàng)建的a元素,添加到div元素中
// * appendChild 追加子元素
divObj.appendChild(aObj);
</script>
7.3 案例實(shí)現(xiàn)
步驟1:給注冊(cè)頁(yè)面添加select標(biāo)簽
<select id="provinceId" onchange="selectCity(this.value)" style="width:150px">
<option value="">----請(qǐng)-選-擇-省----</option>
<option value="0">北京</option>
<option value="1">吉林省</option>
<option value="2">山東省</option>
<option value="3">河北省</option>
<option value="4">江蘇省</option>
</select>
<select id="cityId" style="width:150px">
<option value="">----請(qǐng)-選-擇-市----</option>
</select>
步驟2:js實(shí)現(xiàn)
<script type="text/javascript">
// 定義二維數(shù)組,初始化數(shù)據(jù)
var cities = new Array(4);
cities[0] = new Array("市轄區(qū)","縣");
cities[1] = new Array("長(zhǎng)春市","吉林市","松原市","延邊市");
cities[2] = new Array("濟(jì)南市","青島市","煙臺(tái)市","濰坊市","淄博市");
cities[3] = new Array("石家莊市","唐山市","邯鄲市","廊坊市");
cities[4] = new Array("南京市","蘇州市","揚(yáng)州市","無(wú)錫市");
//通過(guò)選擇的省,顯示對(duì)應(yīng)的所有的市
function selectCity(index){
//通過(guò)索引獲得對(duì)應(yīng)的所有的市
var allCity = cities[index];
// 獲得city select 對(duì)象
var cityObj = document.getElementById("cityId");
cityObj.innerHTML = "<option value=''>----請(qǐng)-選-擇-市----</option>";
//遍歷所有的市
for(var i = 0 ; i < allCity.length ; i ++){
// 獲得具體的市
var cityName = allCity[i];
// 創(chuàng)建option
var option = document.createElement("option");
// 創(chuàng)建文本節(jié)點(diǎn)
var textNode = document.createTextNode(cityName);
//將文本添加到option中
option.appendChild(textNode);
// 將option追加到select中
cityObj.appendChild(option);
}
}
</script>
7.4 總結(jié):DOM
從昨天到現(xiàn)在,所有的案例中,我們獲得元素,創(chuàng)建元素等操作,統(tǒng)稱(chēng)為DOM操作。接下來(lái)我們一起總結(jié)一下DOM。
7.4.1 什么是DOM
DOM:Document Object Model 文檔對(duì)象模型,定義訪問(wèn)和操作結(jié)構(gòu)化文檔(HTML)的方式。
創(chuàng)建的結(jié)構(gòu)化文檔:html、xml 等
DOM包括:核心DOM、HTML DOM、XML DOM。通常情況下HTML DOM 和XML DOM是可以相互使用的。
HTML DOM 將 整個(gè)HTML文檔呈現(xiàn)成一顆DOM樹(shù),樹(shù)中有元素、屬性、文本等成員。
7.4.2 document文檔對(duì)象
瀏覽器加載整個(gè)HTML文檔形成Document 對(duì)象,Document 對(duì)象可以訪問(wèn)和操作HTML文檔中的所有元素。
獲得元素
lgetElementById() 通過(guò)id屬性值獲得元素(整個(gè)HTML文檔id位置)
<xxx id=””>
lgetElementsByName() 通過(guò)name屬性值獲得所有元素(整個(gè)HTML文檔中name可能相同)
<xxx name=””>
lgetElementsByClassName() 通過(guò) class屬性值獲得所有元素
<xxx class=””>
lgetElementsByTagName() 通過(guò)標(biāo)簽名獲得所有的元素
<xxx>
創(chuàng)建
createElement() 創(chuàng)建指定名稱(chēng)的元素
createTextNode() 創(chuàng)建指定內(nèi)容的文本節(jié)點(diǎn)
常見(jiàn)屬性
childNodes,獲得所有的子節(jié)點(diǎn)
nodeName, 返回節(jié)點(diǎn)名稱(chēng)。(標(biāo)簽名)
nodeType, 返回節(jié)點(diǎn)類(lèi)型。(元素、屬性、文本 等)
nodeValue, 節(jié)點(diǎn)的值。(只有文本節(jié)點(diǎn)才有該屬性)
7.4.3 element元素對(duì)象
Element 對(duì)象表示 HTML文檔中的元素(HTML稱(chēng)為標(biāo)簽)。元素可包含屬性、其他元素或文本。也就是說(shuō)HTML標(biāo)簽可以包含屬性,其他子標(biāo)簽或文本。
appendChild() 給元素追加子元素
<a>
…
追加位置
</a>
insertBefore() 給當(dāng)前元素前追加兄弟元素
插入位置
<a>
setAttribute(k,v) 給元素設(shè)置屬性
<xxx k=v >
7.4.4 名稱(chēng)解釋
元素(標(biāo)簽)Element、屬性Attribute、文本Text 統(tǒng)稱(chēng)為:節(jié)點(diǎn)Node
7.5 總結(jié)
7.5.1 全局函數(shù)
分類(lèi)
函數(shù)名
描述
轉(zhuǎn)換
parseFloat()
解析一個(gè)字符串并返回一個(gè)浮點(diǎn)數(shù)。
parseInt()
解析一個(gè)字符串并返回一個(gè)整數(shù)。
執(zhí)行
eval()
計(jì)算 JavaScript 字符串,并把它作為腳本代碼來(lái)執(zhí)行。
編碼
encodeURI()
把字符串編碼為 URI。
decodeURI()
解碼某個(gè)編碼的 URI。
JavaScript入門(mén)2擴(kuò)展
第8章 作業(yè):列表左右選擇(參考)
8.1 案例介紹
在很多應(yīng)用程序中,都存在需要將若干項(xiàng)添加到另外一個(gè)位置,本案例將為大家實(shí)現(xiàn)此功能。
8.2 案例分析
當(dāng)獲得select標(biāo)簽后,可以通過(guò)element的childNodes屬性獲得的子節(jié)點(diǎn)(子元素和文本節(jié)點(diǎn)),通過(guò)子標(biāo)簽(option) 的 selected屬性判斷是否選中,就可以完成需要功能。
8.3 案例實(shí)現(xiàn)
8.3.1 html頁(yè)面
<td>
<select id="leftSelectId" style="width:100px" multiple="multiple" size="6">
<option>悟空教程</option>
<option>Java幫幫</option>
<option>Java學(xué)院</option>
</select>
</td>
<td>
<input id="left1" type="button" value=">" style="width:50px" onclick="leftToRightOne()"/> <br/>
<input id="left2" type="button" value=">>" style="width:50px"onclick="leftToRightSelect()"/> <br/>
<input id="left3" type="button" value=">>>" style="width:50px"onclick="leftToRightAll()"/> <br/>
<input type="button" value="<" style="width:50px"/> <br/>
<input type="button" value="<<" style="width:50px"/> <br/>
<input type="button" value="<<<" style="width:50px"/> <br/>
</td>
<td>
<select id="rightSelectId" style="width:100px" multiple="multiple" size="6">
<option>孤獨(dú)求敗</option>
</select>
</td>
8.3.2 選中一個(gè)
/**
* 此處使用 childNodes 獲得所有子節(jié)點(diǎn),也可以使用 <select>標(biāo)簽特有的屬性options獲得所有的<option>子標(biāo)簽
*/
function leftToRightOne(){
var leftSelect = document.getElementById("leftSelectId");
var rightSelect = document.getElementById("rightSelectId");
//alert(leftSelect.childNodes[1].nodeName);
for(var i = 0 ; i < leftSelect.childNodes.length ; i ++){
if(leftSelect.childNodes[i].selected){
rightSelect.appendChild(leftSelect.childNodes[i]);
break;
}
}
}
8.3.3 選中多個(gè)
/**
* leftSelect.childNodes.length 最終長(zhǎng)度為7,獲得4個(gè)text文本,3個(gè)option
* * 元素:text、option[1]、text、option[2]、text、option[3]、text
* * 當(dāng)遍歷時(shí),第一個(gè)option移除后,length變成了6,此時(shí)i==2,正好是第二個(gè)option
* 移除第二個(gè)后,此時(shí)i=3,正好是第三個(gè)option,所以可以正常移動(dòng)所有
*/
function leftToRightSelect(){
var leftSelect = document.getElementById("leftSelectId");
var rightSelect = document.getElementById("rightSelectId");
for(var i = 0 ; i < leftSelect.childNodes.length ; i ++){
if(leftSelect.childNodes[i].selected){
rightSelect.appendChild(leftSelect.childNodes[i]);
}
}
}
8.3.4 所有,提供3種實(shí)現(xiàn)方式
方式1:子元素和文本同時(shí)都移動(dòng),
function leftToRightAll(){
var leftSelect = document.getElementById("leftSelectId");
var rightSelect = document.getElementById("rightSelectId");
for(var i = 0 ; i < leftSelect.childNodes.length ; i ++){
rightSelect.appendChild(leftSelect.childNodes[i]);
i--; //因?yàn)閘ength是不斷變化的,保證一直移除第一個(gè)。
}
}
方式2:length不斷變化,i不需要變化
function leftToRightAll(){
var leftSelect = document.getElementById("leftSelectId");
var rightSelect = document.getElementById("rightSelectId");
for(var i = 0 ; i < leftSelect.childNodes.length ; ){
rightSelect.appendChild(leftSelect.childNodes[i]);
//因?yàn)閘ength是不斷變化的,保證一直移除第一個(gè)。
}
}
方式3:采用倒序,不過(guò)右邊內(nèi)容也是倒序的
function leftToRightAll(){
var leftSelect = document.getElementById("leftSelectId");
var rightSelect = document.getElementById("rightSelectId");
for(var i = leftSelect.childNodes.length - 1 ; i >=0 ; i --){
rightSelect.appendChild(leftSelect.childNodes[i]);
}
}