Python入門23之JS
JS
JS是javascript的簡稱;
1)是指令碼語言,為瀏覽器的一部分;
2)廣泛用於客戶端的指令碼語言,現在也用於服務端;
常用來為網頁新增各式各樣的動態功能(如:輪播圖、tab切換等),為使用者提供更流暢美觀的瀏覽效果。
3)通常JavaScript指令碼是通過嵌入在HTML中來實現自身的功能的。
一.JS表單註冊雛形
需求:
1). 使用者在註冊的時候會輸入一些資訊, 但是使用者輸入的內容有可能不合法, 會導致伺服器端壓力過大;
2). 當用戶填寫資訊之後, 對填寫的資訊進行校驗,不光是前臺需要校驗,後臺也是需要校驗的
這是就需要用到JS,來對前後臺的資料進行交流.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!--<style></style>--> <!--<link>--> <script> window.onload = function () { // 1. 獲取使用者輸入的使用者名稱的標籤物件; var uEle = document.getElementById('username'); alert(uEle); //用來彈出指示框 // 2. 獲取這個物件裡面的值; var uValue = uEle.value; alert(uValue); } </script> </head> <body> <form action="#" method="get"> <!--get: 填寫的資訊會在url裡面顯示, 對於重要的資料來說是不安全的; post: 填寫的資訊不會在url裡面顯示 --> 使用者名稱: <input type="text" name="username" placeholder="使用者名稱" id="username"><br/> 密碼: <input type="password" name="passwd" placeholder="密碼"><br/> <input type="submit" value="註冊"> </form> </body> </html>
二.上面的只是一個雛形,並沒有對註冊資訊提出任何要求
現在的需求如下 現在的需求如下 :
1)判斷使用者名稱是否為空?
2)校驗密碼是否大於6位, 如果不滿足則不合法 ?
實現步驟:
1). 確定事件型別onsubmit(常見事件型別的網址: http://www.w3school.com.cn/js/js_htmldom_events.asp);
2). 對這個事件繫結一個函式(執行的操作寫在函式裡面);
3).函式的核心功能: 校驗使用者名稱是否為空?
1.獲取輸入使用者名稱標籤提交的內容;
2. if判斷使用者名稱是否為空?
3. 如果資料合法, 繼續執行, 提交表單;
4. 如果資料不合法, 不讓表單提交? (顯示彈出框報錯) — alert
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!--<style></style>--> <!--<link>--> <script> // *****************************1. 校驗使用者名稱是否為空? *************************** // 定義一個函式 function checkForm() { // 1). 獲取輸入使用者名稱標籤提交的內容; var user = document.getElementById('username').value; // 2). if判斷使用者名稱是否為空? // 3). 如果資料合法, 繼續執行, 提交表單; // 4). 如果資料不合法, 不讓表單提交? (顯示彈出框報錯) --- alert if (user === '') { alert("使用者名稱不能為空!"); return false; } // ******************************2. 校驗密碼長度是否小於6 ************************** // 難點: 獲取密碼長度(http://www.w3school.com.cn/js/js_obj_string.asp) var passwdlen = document.getElementById('passwd').value.length; if (passwdlen < 6){ alert("密碼不合法: 長度小於6!"); return false; } } </script> </head> <body> <form action="#" method="get" onsubmit="return checkForm()"> 使用者名稱: <input type="text" name="username" placeholder="使用者名稱" id="username"><br/> 密碼: <input type="password" name="passwd" placeholder="密碼" id="passwd"><br/> <input type="submit" value="註冊"> </form> </body> </html>
三.JS如何實現輪播圖
實現圖片的自動轉換功能
實現步驟:
1)確定事件型別為onclick事件;
2)並跟對應的函式changeImg繫結在一起;
3)實現函式功能;
當點選下一頁按鈕之後, 修改img標籤裡面的src屬性內容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#sowing_map{
width: 590px;
height:500px;
margin: 0 auto;
text-align: center;
}
</style>
<script>
// 1. 定義一個變數, 控制圖片的迴圈順序;
var i = 1;
function changeImg() {
// 2. 當點選下一頁時, i+1, 這個時候, 圖片變成img2;
i += 1;
// 3. 修改img標籤裡面的src屬性內容;
document.getElementById('img').src = 'img/img' + i + '.jpg';
// 4. 如果圖片輪播結束, 從頭開始輪播;
if (i === 6){
i = 0;
}
}
</script>
</head>
<body>
<div id="sowing_map"><img src="img/img7_ad.jpg" height="80" width="1190"/>
<img src="img/img1.jpg" id="img">
<input type="button" value="下一頁" onclick="changeImg()">
</div>
</body>
</html>
四.外部引入JS程式碼和CSS樣式實現輪播圖
同時實現網頁定時彈出廣告,並定時取消彈出的廣告:
1.在頁面設定一個隱藏的圖片,style=“display:none”
2.確定事件型別為onload,為其繫結一個函式
3.設定執行的函式
4.編寫定時任務裡面的函式img_Ad()
獲取標籤的樣式display==‘block’
清除顯示的廣告的定時任務
隱藏廣告的定時任務
5.實現定時任務裡面的函式hiddenAd()
獲取標籤的樣式display==‘block’
清除顯示的廣告的定時任務
主程式碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--Js的引入方式:-->
<!-- - 內部引入: 直接在head標籤裡面的<script>寫的內容;-->
<!-- - 外部引入:<script src="js/main.js" ></script-->
<link href="CSS/main.css" rel="stylesheet">
<script src="JS/main.js"></script>
</head>
<body>
<div id="sowing_map">
<img src="img/img1.jpg" id="img">
<!--<input type="button" value="下一頁" onclick="changeImg()">-->
</div>
<div>
<img src="img/img7_ad.jpg" id="img_ad" style="display:none">
</div>
</body>
</html>
CSS裡面的程式碼:
#sowing_map{
width: 590px;
height: 500px;
margin: 0 auto;
text-align: center;
}
#img_ad{
width: 1190px;
height: 80px;
margin: 0 auto;
text-align: center;
}
JS裡面的程式碼:
window.onload=function () {
//每隔1s自動執行某函式
setInterval('changeImg()',1000);
//每隔1s執行
setInterval('img_Ad()',1000);
adtime=clearInterval(img_Ad(),1000)
};
//定義一個變數,控制函式的迴圈順序
var i=1;
function changeImg() {
//當點選下一頁的時候,i+1,這時,圖片變為img2
i += 1;
//修改img標籤裡面src的屬性內容
document.getElementById("img").src = "img/img" + i + ".jpg";
//如果圖片輪播結束,從頭開始重來
if (i === 6) {
i = 0;
}
}
//編寫顯示隱藏圖片的函式
function img_Ad() {
//獲取到廣告圖片對應的標籤物件
var ad=document.getElementById('img_ad');
//修改廣告裡面的style的屬性display
ad.style.display='block';
//設定隱藏廣告圖片的定時任務
hiddentime=setInterval('hiddenAd()',1000)
}
function hiddenAd() {
var ad=document.getElementById('img_ad');
ad.style.display='none';
clearInterval(hiddentime)
}
這樣一來,就可以減輕主程式碼的榮雜程度,使得程式碼更加的清晰
五.JS使用者註冊介面的優化
填寫使用者名稱和密碼時,旁邊需有提示;
使用者名稱或者密碼註冊時,離開當前填寫框時,立即作出判斷,填寫內容是否符合要求
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
function showUserTip() {
// 1. 獲取標籤物件;
document.getElementById('userTip').innerHTML = '<b style="color: lightgray;">使用者名稱不能為空</b>';
}
function showPwdTip() {
// 1. 獲取標籤物件;
document.getElementById('pwdTip').innerHTML = '<b style="color: lightgray;">密碼必須大於6位</b>';
}
function checkUser() {
//1. 離焦時判斷使用者名稱是否為空?
var name = document.getElementById('user').value;
// 2. 如果為空, 右邊來一個紅色的提示;
// 3. 如果不為空, 則取消所有提示;
if (name === ''){
document.getElementById('userTip').innerHTML = '<b style="color: #f10180">使用者名稱不能為空</b>'
return false;
}else{
document.getElementById('userTip').innerHTML = '<b style="color: green"> ok </b>'
return true;
}
}
function checkPwd() {
// alert('離焦');
//1. 離焦時判斷使用者名稱是否為空?
var pwdLen = document.getElementById('pwd').value.length;
// 2. 如果為空, 右邊來一個紅色的提示;
// 3. 如果不為空, 則取消所有提示;
if (pwdLen < 6){
document.getElementById('pwdTip').innerHTML = '<b style="color: #f10180">密碼必須大於等於6位</b>'
return false;
}else{
document.getElementById('pwdTip').innerHTML = '<b style="color: green"> ok </b>'
return true;
}
}
</script>
</head>
<body>
<!--
1). 確定事件型別(onfocus-聚焦事件), 併為其繫結一個函式;
2). 確定事件型別(onblur-離焦事件), 併為其繫結一個函式;
-->
<form action="#" method="get">
<input type="text" id='user' placeholder="輸入使用者名稱" name="username" onfocus="showUserTip()"
onblur="checkUser()">
<span id="userTip"></span><br/>
<input type="password" id="pwd" placeholder="密碼" name="passwd" onfocus="showPwdTip()"
onblur="checkPwd()">
<span id="pwdTip"></span><br/>
<input type="submit" value="註冊">
</form>
</body>
</html>
六.實現表單選項的全選與全不選
步驟分析:
1). 確定事件型別:滑鼠單擊單選按鈕時(onclick事件), 繫結一個函式;
2). 編寫函式checkAll()
當選中編號前面的方框時,不管下面的選沒選,都會被自動選擇;
同理當取消選中編號前面的方框時,下面選則的,都會被自動取消
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
function checkAll() {
//1. 獲取全選框物件
var checkAllEle = document.getElementById('checkAll');
// alert(checkAllEle);
// //判斷該單選框是否被選中,
// alert(checkAllEle.checked);
// 2. 對編號前面的複選框的狀態進行判斷;
// - 如果狀態為選中, 則設定所有的單選框為選中狀態;
// - 如果狀態為沒有選中, 則設定所有的單選框為沒有選中狀態;
if (checkAllEle.checked){
//- 如果狀態為選中, 則設定所有的單選框為選中狀態;
var checkOnes = document.getElementsByName('checkOne');
// 依次遍歷所有的單選框, 設定狀態為選中;li = [1,2,3,4]
for(var i =0; i<checkOnes.length; i++){
// li[0] li[1] li[2] li[3]
checkOnes[i].checked = true;
}
}else{
//- 如果狀態為未選中, 則設定所有的單選框為未選中狀態;
var checkOnes = document.getElementsByName('checkOne');
// 依次遍歷所有的單選框, 設定狀態為選中;li = [1,2,3,4]
for(var i =0; i<checkOnes.length; i++){
// li[0] li[1] li[2] li[3]
checkOnes[i].checked = false;
}
}
}
</script>
</head>
<body>
<table style="width: 600px;margin: 0 auto;margin-top: 50px;text-align: center;" border="1px">
<th style="text-align: center;" colspan="5">
<input type="button" value="新增">
<input type="button" value="刪除">
</th>
<tr>
<th><input type="checkbox" id="checkAll" onclick="checkAll()"></th>
<th>編號</th>
<th>姓名</th>
<th>性別</th>
<th>年齡</th>
</tr>
<tr>
<td><input type="checkbox" name="checkOne"></td>
<td>one</td>
<td>1</td>
<td>1</td>
<td>1</td>
</tr>
<tr>
<td><input type="checkbox" name="checkOne" ></td>
<td>two</td>
<td>1</td>
<td>2</td>
<td>2</td>
</tr>
<tr>
<td><input type="checkbox" name="checkOne"></td>
<td>three</td>
<td>3</td>
<td>3</td>
<td>1</td>
</tr>
<tr>
<td><input type="checkbox" name="checkOne"></td>
<td>four</td>
<td>4</td>
<td>1</td>
<td>4</td>
</tr>
<tr>
<td><input type="checkbox" name="checkOne"></td>
<td>five</td>
<td>5</td>
<td>1</td>
<td>5</td>
</tr>
</table>
</body>
</html>
七.JS實現動態新增城市
實現步驟:
確定事件型別onclick
對於事件繫結一個函式addLiElement()
1).獲取到使用者在input輸入框中填寫的資訊;
city = document.getElementById(“city”).value
2). 建立一個城市的文字節點;document.createTextNode(‘xxxx’)
3). 建立一個li的元素節點; document.createElement(‘xxxx’)
4). 將文字節點新增到li元素節點裡面去;
5). 將整體新增到ul標籤裡面去;
使用appendChild()來新增子節點
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
function addCity() {
var city=document.getElementById('city').value;
var textNode=document.createTextNode(city);
var liEleNode=document.createElement('li');
liEleNode.appendChild(textNode);
var ulEleNode=document.getElementById('ul_city');
ulEleNode.appendChild(liEleNode);
}
</script>
</head>
<body>
<input type="text" placeholder="請輸入城市" id="city">
<input type="submit" value="新增城市" id="citybtn" onclick="addCity()">
<ul id="ul_city">
<li>北京</li>
<li>上海</li>
<li>西安</li>
</ul>
</body>
</html>
八.JS實現省市的二級聯動
步驟實現:
1). 確定事件型別onchange, 併為其繫結一個函式;
2). 修改下拉列表內容;
2-1). 獲取使用者選擇的省份;
2-2). 建立一個二維陣列, 用來儲存省份和城市的對應關係;
2-3). 遍歷二維陣列中的省份;
2-4). 遍歷時省份編號和使用者選擇的省份編號進行比較,
2-5). 如果相同, 遍歷該省份下的所有城市;
將每一個城市以城市名新增到select裡面去
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
function changecity() {
var choiceProvince=document.getElementById('province').value;
var cites=new Array(3);
cites[0]=new Array('青島','煙臺','濟南');
cites[1]=new Array('成都','綿陽','廣元');
cites[2]=new Array('西安','咸陽','寶雞');
var selectEleNode=document.getElementById('city');
selectEleNode.options.length=0;
for(var i=0;i<cites.length;i++){
if (choiceProvince==i){
for(var j=0;j<cites[i].length;j++){
var textNode=document.createTextNode(cites[i][j]);
var optionEleNode=document.createElement('option');
optionEleNode.appendChild(textNode);
selectEleNode.appendChild(optionEleNode);
}
}
}
}
</script>
</head>
<body>
<form>
<div style="text-align: center">
<span>籍貫:</span>
<select onchange="changecity()" id="province">
<option>請選擇省份</option>
<option value="0">山東</option>
<option value="1">四川</option>
<option value="2">陝西</option>
</select>
<select id="city">
<option>請選擇城市</option>
</select>
</div>
</form>
</body>
</html>