1. 程式人生 > >jQuery 實現左右Select列表資料互換

jQuery 實現左右Select列表資料互換

前言

很簡單的一個效果,交換兩個select列表的option項,常用於“交換”相關的需求,效果圖如下所示:


程式碼

思路很簡單,點選按鈕無非就是將select1中的選中的option append到select2中,這裡我們主要用到的就是jquery的appendTo方法,我們在w3cschool可以看到這個方法的詳細介紹,


很簡單,下面直接貼上全部程式碼以供參考:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
	String path = request.getContextPath();
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<style type="text/css">
* {
	margin: 0;
	padding: 0;
	list-style-type: none;
}

a,img {
	border: 0;
}

body {
	font: 12px/180% Arial, Helvetica, sans-serif, "新宋體";
}

.selectbox {
	width: 500px;
	height: 220px;
	margin: 40px auto 0 auto;
}

.selectbox div {
	float: left;
}

.selectbox .select-bar {
	padding: 0 20px;
}

.selectbox .select-bar select {
	width: 150px;
	height: 200px;
	border: 4px #A0A0A4 outset;
	padding: 4px;
}

.selectbox .btn {
	width: 50px;
	height: 30px;
	margin-top: 10px;
	cursor: pointer;
}
.bottom-btn{
	width: 500px;
	height: 220px;
	margin: 40px auto 0 auto;
	margin-left: 40%;
}
</style>

<script type="text/javascript" src="<%=path%>/js/jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="<%=path%>/js/common/common.js"></script>
<script type="text/javascript">
	$(function() {
		//移到右邊
		$('#add').click(function() {
			//獲取選中的選項,刪除並追加給對方
			$('#select1 option:selected').appendTo('#select2');
		});

		//移到左邊
		$('#remove').click(function() {
			$('#select2 option:selected').appendTo('#select1');
		});

		//全部移到右邊
		$('#add_all').click(function() {
			//獲取全部的選項,刪除並追加給對方
			$('#select1 option').appendTo('#select2');
		});

		//全部移到左邊
		$('#remove_all').click(function() {
			$('#select2 option').appendTo('#select1');
		});

		//雙擊選項
		$('#select1').dblclick(function() { //繫結雙擊事件
			//獲取全部的選項,刪除並追加給對方
			$("option:selected", this).appendTo('#select2'); //追加給對方
		});

		//雙擊選項
		$('#select2').dblclick(function() {
			$("option:selected", this).appendTo('#select1');
		});

	});
	
	function reGrouping(){
		var group1 = [];
		var options = $('#select1 option');
		for(var i=0;i<options.length;i++){
			group1.push(options.eq(i).val());
		}
		var str1 =$('#sp1').html()+','+group1.join(',');
		
		var group2 = [];
		var options2 = $('#select2 option');
		for(var i=0;i<options2.length;i++){
			group2.push(options2.eq(i).val());
		}
		var str2 =$('#sp2').html()+','+group2.join(',');
		
		 $.ajax({
		        method:'post',
		        url:'../../app/mutualEvaluation/reGrouping',
		        data:{str1:str1,str2:str2},
		        dataType:'json',
		        cache:false,
		        success:function(data)
		        { 
		        	if("ok"==data.data)
					{
						alert("調整分組成功!");
						return ;
					}else
					{
						alert(data.data);
						return ;	
					}
		        }
		    });
		 location.href = '../../app/mutualEvaluation/toGroupingPage';
	}
	
	function toGroupingPage(){
		location.href = '../../app/mutualEvaluation/toGroupingPage';
	}
</script>
<link href="<%=path%>/css/mytable.css" rel="stylesheet" type="text/css" />
</head>
<body>
		
		<div class="selectbox">
			<div class="select-bar">
				<span id="sp1">${groupOneName}</span><br/>
				<select multiple="multiple" id="select1">
					<c:forEach items="${groupOneList}" var="item">
						<option value="${item.stunumber}">${item.stuname}</option>
					</c:forEach>
				</select>
			</div>
	
			<div class="btn-bar"><br/>
				<span id="add"><input type="button" class="btn" value=">" /></span><br /> 
				<span id="add_all"><input type="button" class="btn" value=">>" /></span><br /> 
				<span id="remove"><input type="button" class="btn" value="<" /></span><br /> 
				<span id="remove_all"><input type="button" class="btn" value="<<" /></span>
			</div>
	
			<div class="select-bar">
				<span id="sp2">${groupTwoName}</span><br/>
				<select multiple="multiple" id="select2">
					<c:forEach items="${groupTwoList}" var="item">
						<option value="${item.stunumber}">${item.stuname}</option>
					</c:forEach>
				</select>
			</div>
		</div>
		
		<div class="bottom-btn">
			<input type="button" class="btn" value="返回" onClick="toGroupingPage()"/>
			<input type="button" class="btn" value="儲存" onClick="reGrouping()"/>
		</div>
</body>
</html>

6696行就是互換資料的js程式碼了,可以看到核心就是通過appendTo去進行option元素的追加,而第100行到133行則是資料整理,畢竟實際應用場景下我們肯定要將資料封裝成一定格式傳到後臺去,我這裡的處理方式是:通過join()將陣列直接轉換成逗號拼接的字串,然後在這個字串前再用逗號拼上小組名,這樣傳到後臺之後合理分割即可方便處理,join()方法是javascript中的Array物件的方法,我們在w3cschool中看一下它的詳細介紹:


逗號做連線符可以預設引數,可以看到這個方法也非常方便的將js陣列轉換成了指定連線符的字串。

總結

同上篇blog類似僅僅記錄和分析一下這種js效果的實現方式,非常簡單,The End。