最近在擴充《選修課系統》的一個功能——老師新增學生指標(教師持有給自己課程新增學生的指標)時,試寫了一個小功能,總結一下。
如介面為老師新增學生指標介面;查詢出本學期教師自己所教課程,再查詢出所要添加的學生 分別選中後,點擊"添加"按鈕,即可給該學生授課。
想達到的效果:可選擇該教師多門課程,給這些課程添加多個學生;
預想如何?:使用數組,將選擇的課程和學生分別放在數組中;
操作中可能存在的問題:選擇課程和學生的不確定因素,即:選擇了課程1、課程2、課程3後又取消選擇課程1/課程2/課程3,選擇了學生1、學生2後,又取消選擇課程1/課程2——數組如何控制 下面內容給出解釋
這次使用的是js實現
介面:
前台:
');"> <%#Eval("SchoolYear")%> <%#Eval("Semester")%> <%#Eval("CourseCode")%> <%#Eval("CourseName")%> <%#Eval("CourseCategoryName")%> <%#Eval("CourseTeacherCount")%>
<%-- --%> "/> <%#Eval("StudentCode") %> <%#Eval("StudentName") %> <%#Eval("Sex") %> <%#Eval("ExecutiveClassName") %> <%#Eval("GradeName") %> <%#Eval("DepartmentName") %> <%#Eval("CollegeName") %>
代碼解釋:
');">
解釋:點擊課程複選框(選擇/取消選擇)時,觸發js函數ChooseChkSelectCourse(obj,CourseName)
解釋:點擊學生複選框(選擇/取消選擇)時,觸發js函數ChooseChkDSKSelectStu(obj)
js代碼:
var arrayCourseID = new Array();//建立數組,存放選中課程行的課程IDvar arrayCourseIDLength = arrayCourseID.length;//存放選中課程行的數組長度arrayCourseIDLength = 0;var arrayCourseName = new Array();//建立數組,存放選中課程行的課程名稱var arrayCourseNameLength = arrayCourseName.length;//存放選中課程行的數組長度arrayCourseNameLength = 0;var arrayStudentID = new Array();//建立數組,存放選中學生行的學生IDvar arrayStuIDLength = arrayStudentID.length;//存放選中學生行的數組長度arrayStuIDLength = 0;var flag = false;//選中某行課程時,對應的函數function ChooseChkSelectCourse(obj,courseName) { //1,如果選中了該課程 if (obj.checked) { var courseID = obj.value;//擷取該行的值(課程ID) arrayCourseIDLength = arrayCourseIDLength + 1;//存放課程ID的數組長度+1 arrayCourseID[arrayCourseIDLength - 1] = courseID;//將選中行的課程ID放入數組arrayStudentID arrayCourseNameLength = arrayCourseNameLength + 1;//存放課程名稱的數組長度+1 arrayCourseName[arrayCourseNameLength - 1] = courseName;//將選中課程行的課程名稱加入數組arrayCourseName } //1,如果取消選中該課程 if (!obj.checked) { var cancelCourseID = obj.value;//擷取取消行的課程ID //迴圈存放選中課程的數組arrayCourseID for (var i = 0; i < arrayCourseID.length; i++) { if (arrayCourseID[i] == cancelCourseID) { //如果arrayCourseID[i]的值=取消選中行的課程ID var count = i; //定義變數count //迴圈遍曆數組arrayStudentID中第i+1個元素——最後一個元素 for (var j = count; j < arrayCourseID.length; j++) { arrayCourseID[j] = arrayCourseID[j + 1];//因為取消了arrayCourseID[i]的值,所以需要將arrayCourseID[i+1]——arrayCourseID[arrayCourseID.length-1]的值往前移 arrayCourseName[j] = arrayCourseName[j + 1];//因為取消了arrayCourseName[i]的值,所以需要將arrayCourseName[i+1]——arrayCourseName[arrayCourseName.length-1]的值往前移 var a = arrayCourseID[i];//測試 a = arrayCourseID[i - 1]; var b = arrayCourseName[i];//測試 b = arrayCourseName[i]; } } } arrayCourseIDLength = arrayCourseIDLength - 1;//存放課程ID的數組arrayCourseID長度-1 arrayCourseNameLength = arrayCourseNameLength - 1;//存放課程名稱的數組arrayCourseName的長度-1 }}//選中某行學生時,對應的函數function ChooseChkSelectStu(obj) { //1,如果選中了該學生 if (obj.checked) { var valStuID = obj.value;//擷取該行的值(學生ID) arrayStuIDLength = arrayStuIDLength + 1;//存放學生ID的數組長度+1 arrayStudentID[arrayStuIDLength - 1] = valStuID;//將選中行的學生ID放入數組arrayStudentID } //1,如果取消選中該學生 if (!obj.checked) { var cancelStuID = obj.value;//擷取取消行的學生ID //迴圈存放選中學生的數組arrayStudentID for(var i=0;i解釋:原理——以選擇/取消學生為例:(1)定義全域變數:學生數組、學生數組長度變數
(2)觸發函數ChooseChkSelectStu(obj)時,先判斷是要選擇該學生還是要取消選擇該學生
(3)如果是選擇:學生數組裡添加一個元素,學生數組長度變數-+1
(4)如果是取消選擇:從取消元素位置開始-數組長度,進行迴圈,依次向前賦值,即學生數組[i]=學生數組[i+1]——目的:將取消選擇的學生從數組中刪除,後面的學生向前依次移動;確保既能成功刪除選擇的學生又能確保數組中無空值
總結:很多東西在後台可以實現,同樣在前台也可實現;後台代碼好些,但不能死守陳舊,嘗試新的東西提升會更快;