从左到右动态移动元素进行选择
Dynamically moving elements from left to right select
我有下面的示例表。
<form method="post" name="form1" action="addpp.php" enctype="multipart/form-data" onSubmit="return validateForm();">
<table width="100%">
<tr>
<td>
<select name="leftProcess" size="5">
<option value="1">Left List Option 1</option>
<option value="2">Left List Option 2</option>
</select>
</td>
<td>
<button onclick="moveRight('leftProcess','rightProcess')">>></button><br/>
<button onclick="moveLeft('rightProcess','leftProcess')"><<</button>
</td>
<td>
<select name="rightProcess" size="5">
<option value="1">Left List Option 1</option>
<option value="2">Left List Option 2</option>
</select>
</td>
</tr>
</table>
</form>
我有两个选择左和右。在这里我只放了静态名称,最终我会有更多的动态名称选择。所以我把这个javascript称为如下。我需要通过名称的左右选择。现在我想要的唯一问题是,选择的左侧元素移动到右侧元素并卡在这一行document.forms["form1"].elements[myRightId].add(document.forms]"form1"].elements[myLeftId][selItem],null);
function moveRight(leftValue,rightValue)
{
//alert("Elft value is t : "+leftValue);
var myLeftId = leftValue;
var myRightId = leftValue;
var selItem = document.forms["form1"].elements[myLeftId].selectedIndex;
alert("test : "+ document.forms["form1"].elements[myLeftId].options[selItem].value);
if (selItem == -1) {
window.alert("You must first select an item on the left side.")
} else {
document.forms["form1"].elements[myRightId].add(document.forms["form1"].elements[myLeftId][selItem], null);
}
}
试试这个-
function moveRight(leftValue, rightValue) {
//alert("Elft value is t : "+leftValue);
var leftSelect = document.forms["form1"].elements[leftValue];
var rightSelect = document.forms["form1"].elements[rightValue];
//alert("test : " + document.forms["form1"].elements[myLeftId].options[selItem].value);
if (leftSelect.selectedIndex == -1) {
window.alert("You must first select an item on the left side.")
} else {
var option = leftSelect.options[leftSelect.selectedIndex];
rightSelect.appendChild(option);
}
}
演示
更新:
如果你想在重新加载浏览器时使select boxes
保持不变,那么你必须将它们的状态存储在浏览器中的某个位置,这可以使用java脚本中的Local Storage
。
window.onload=function() {
if (Storage) {
var leftSelect = document.forms["form1"].elements["leftProcess"];
var rightSelect = document.forms["form1"].elements["rightProcess"];
if (localStorage.leftOptions.length>0) {
clearSelect(leftSelect);
fillSelect(leftSelect, JSON.parse(localStorage.leftOptions));
}
if (localStorage.rightOptions.length>0) {
clearSelect(rightSelect);
fillSelect(rightSelect,JSON.parse( localStorage.rightOptions));
} else {
alert("local storage not supported");
}
}else{
alert("not supported")
}
}
window.onbeforeunload = function (event) //before refresh
{
saveCurrentState(document.forms["form1"].elements["leftProcess"], document.forms["form1"].elements["rightProcess"]);
// return true;
}
function saveCurrentState(leftSelect, rightSelect) {
if (Storage) {
var leftOptions = [];
for (var i=0;i<leftSelect.options.length;i++) {
leftOptions.push({
"value": leftSelect.options[i].value,
"innerHTML": leftSelect.options[i].innerHTML
});
}
}
var rightOptions = [];
for (var i=0;i<rightSelect.options.length;i++) {
rightOptions.push({
"value": rightSelect.options[i].value,
"innerHTML": rightSelect.options[i].innerHTML
});
}
localStorage.leftOptions=JSON.stringify(leftOptions);
localStorage.rightOptions=JSON.stringify(rightOptions);
}
function fillSelect(select, options) {
for (i = 0; i < options.length; i++) {
var opt = document.createElement('option');
opt.value = options[i].value;
opt.innerHTML = options[i].innerHTML;
select.appendChild(opt);
}
}
function clearSelect(select) {
select.innerHTML="";
}
带LocalStorage的DEMO
相关文章:
- 禁用/启用基于单选/选择选项所选Javascript的文本框
- ui.grid 行无法选择行
- 根据换行符选择文本
- 基于单选/选择选项重定向
- 单击提交时存储输入单选选择
- 如何使用regex在多行中选择包含任意字符的值
- 如何在多选选择框后调用javascript方法
- 在文档加载和函数调用时,行的选择方式不同
- jQuery Mobile:单选选择菜单值干扰多选菜单的处理程序
- 多个文本字段,根据单选选择显示/隐藏(Html,JS)
- HTML 行表选择
- 在单选选择中更改前缀货币符号
- 单击单选选择时动态显示 DIV
- 检查是否进行了单选选择
- 基于下拉选择的单选选择/取消选择
- 防止单选选择与时间选择重叠
- 所选选择框中更新选项的性能
- 使jqGrid多选选择在分页、工具栏搜索或筛选后保持不变
- 如何触发对复选框的更改或单击行以选择表行
- 在表格行中选择单选按钮时,行的颜色应该更改