劳动了昨天晚上,老大说了这jquery代码维护人员看起来累。这。打算改成js代码。前提条件:
后天传到页面的是一个list<Vo>
比如Vo里又两个属性,no,type
我拼为字符串显示在select的option里,显示如下:(两个select是一样的内容,要作出2级联动)<select id="From">
<option selected="selected" value="0">Please Select</option>
<option value="hkd`001" >hkd`001</option>
<option value="cny`001" >cny`001</option>
<option value="hkd`002" >hkd`002</option>
<option value="cny`002" >cny`002</option>
</select>
<select id="To">
<option selected="selected" value="0">Please Select</option>
<option value="hkd`001" >hkd`001</option>
<option value="cny`001" >cny`001</option>
<option value="hkd`002" >hkd`002</option>
<option value="cny`002" >cny`002</option>
</select>
现在问题是:
1,我想保存刚进页面时整个select,方面以后点击“取消”按钮,恢复select的原始状态,但是,为程序里使用在function外使用了var acctto = document.getElementById("To");
var list = acctto.innerHTML;list为空,怎么保存这个数据呢?
2,原先打算使用options.remove(i),但是ie支持,ff不支持。囧。add(new Optino(value,value));却都支持。对于js菜鸟来说,不支持就没辄了。。
附上昨天晚上的js代码:
<script type="text/javascript" language="javascript">
$(function(){
$("#From,#To").change(function(){
if ($(this).val() == "0") {
$("#From,#To").children("span").each(function(){
$(this).children().clone().replaceAll($(this));
});
}
else {
var that = this;
setTimeout(function(){
$("#From,#To")
.children("option[parentid][parentid!='" + $(that).children("[value='" + $(that).val() + "']").attr("parentid") + "']")
.wrap("<span style='display:none'></span>");
},200);
}
});
});
</script>
后天传到页面的是一个list<Vo>
比如Vo里又两个属性,no,type
我拼为字符串显示在select的option里,显示如下:(两个select是一样的内容,要作出2级联动)<select id="From">
<option selected="selected" value="0">Please Select</option>
<option value="hkd`001" >hkd`001</option>
<option value="cny`001" >cny`001</option>
<option value="hkd`002" >hkd`002</option>
<option value="cny`002" >cny`002</option>
</select>
<select id="To">
<option selected="selected" value="0">Please Select</option>
<option value="hkd`001" >hkd`001</option>
<option value="cny`001" >cny`001</option>
<option value="hkd`002" >hkd`002</option>
<option value="cny`002" >cny`002</option>
</select>
现在问题是:
1,我想保存刚进页面时整个select,方面以后点击“取消”按钮,恢复select的原始状态,但是,为程序里使用在function外使用了var acctto = document.getElementById("To");
var list = acctto.innerHTML;list为空,怎么保存这个数据呢?
2,原先打算使用options.remove(i),但是ie支持,ff不支持。囧。add(new Optino(value,value));却都支持。对于js菜鸟来说,不支持就没辄了。。
附上昨天晚上的js代码:
<script type="text/javascript" language="javascript">
$(function(){
$("#From,#To").change(function(){
if ($(this).val() == "0") {
$("#From,#To").children("span").each(function(){
$(this).children().clone().replaceAll($(this));
});
}
else {
var that = this;
setTimeout(function(){
$("#From,#To")
.children("option[parentid][parentid!='" + $(that).children("[value='" + $(that).val() + "']").attr("parentid") + "']")
.wrap("<span style='display:none'></span>");
},200);
}
});
});
</script>
acctto.options[i] = null; 可以把option删除。那么就剩下第一个问题了,怎么把原始得到的select数据保存下来。方便删除后,恢复到原来的所有选项呢?
var acctto = document.getElementById("To");
var list = acctto.innerHTML;汗,这段代码只能在方法里有值。这样的话就达不到我取全部值的需要了,毕竟当第一次remove了一个option后,再进方法取到的是remove后的数据,并不是remove前的数据。
1、直接一点吧:你想在页面加载后保存谁?是FROM还是TO?我假设是FROM:<script>
var bakSelect=null;//select "From" bakup object
function restoreSelect(){
var div=document.getElementById("divFrom")
div.innerHTML='';
div.appendChild(bakSelect);
}window.onload=function(){
bakSelect=document.getElementById("From").cloneNode(true)
}
</script>
<body>
<div id=divFrom>
<select id="From">
<option selected="selected" value="0">Please Select</option>
<option value="hkd`001" >hkd`001</option>
<option value="cny`001" >cny`001</option>
<option value="hkd`002" >hkd`002</option>
<option value="cny`002" >cny`002</option>
</select>
</div>
<div id=divTo>
<select id="To">
<option selected="selected" value="0">Please Select</option>
<option value="hkd`001" >hkd`001</option>
<option value="cny`001" >cny`001</option>
<option value="hkd`002" >hkd`002</option>
<option value="cny`002" >cny`002</option>
</select>
</div>
<input type=button value="恢复SELECT 'FROM'" onclick="restoreSelect();">
</body>
2、没看懂,呵呵
<select id="From">
<option selected="selected" value="0">Please Select</option>
<option value="hkd`001" >hkd`001</option>
<option value="cny`001" >cny`001</option>
<option value="hkd`002" >hkd`002</option>
<option value="cny`002" >cny`002</option>
</select>
<select id="To">
<option selected="selected" value="0">Please Select</option>
<option value="hkd`001" >hkd`001</option>
<option value="cny`001" >cny`001</option>
<option value="hkd`002" >hkd`002</option>
<option value="cny`002" >cny`002</option>
</select>
<input type="button" value="取消" onclick="restoreState(document.getElementById('From')); restoreState(document.getElementById('To'))">
<script type="text/javascript">
function restoreState(sel){
var original = eval("window.data_" + sel.id);
if(!original) return;
sel.options.length = 0;
sel.innerHTML = "";
for(var i=0;i<original.length;i++){
sel.options.add(new Option(original[i][1], original[i][0]));
sel.options[i].selected = original[i][2];
}
}
function saveState(sel){
if(typeof eval("window.data_" + sel.id)=="undefined") eval("window.data_" + sel.id + "=[];");
var original = eval("data_" + sel.id);
original.length = 0;
for(var i=0;i<sel.options.length;i++){
original[i] = [sel.options[i].value, sel.options[i].text, sel.options[i].selected];
}
}
onload = function (){
var sel = document.getElementById("From");
sel.options[2].selected = true;
saveState(sel);
sel = document.getElementById("To");
sel.options[3].selected = true;
saveState(sel);
}</script>
页面的onload方法是不能随便设置的。因为项目有已经定义了。
.........................
</body>
</html>
<script>
function restoreSelect(){
var div=document.getElementById("divFrom")
div.innerHTML=''; div.appendChild(bakSelect);
}
//select "From" bakup object
var bakSelect=document.getElementById("From").cloneNode(true);
</script>
<script type="text/javascript">
function fnOld(){
alert('fnOld');
}
function fnNew(){
alert('fnNew');
}
</script>
</head><body onload='fnOld()'>
</body>
<script type="text/javascript">
if (window.addEventListener){
window.addEventListener('load', fnNew,true);
} else if (window.attachEvent){
window.attachEvent('onload', fnNew);
}
</script></html>