一个是写的级联控件,在动态创建select的option时遇到的问题。
刚开始的做法是在后台通过dwr返回 键值对时,使用prototype的模板,生成一串innertHTML然后设置到select节点进去,这种方式在FF上能正常处理,但是在ie下打死都出不来效果。所以这种方法就被抛弃了。
接着的方式是,通过document.createElement('option')来创建节点,然后将option节点动态append到 select节点下,这种方法在ie下显示正常,但是在ff上却是反常的,老是提示“String contains invalid character”。这种方法解着也被抛弃。
最后的方法是现现在的这种方式:
select.options[select.options.length] = new Option(name,value);
这种方法终于在火狐和ie上显示都正常 了。感谢网络上庞大的知识库,在浩瀚的知识库上,我找到很多与我有同样问题的人,同时在最终找到了解决方式。据说,最后一种方法是w3c建议的,兼容性最好的一个。
第二个问题是写分页控件时,替换表格中的innerHTML时候老是报,运行期异常。
现在确认是在FF中这样替换是没有问题的,到时再IE中是不行的,因为ie中的table等的innerHTML是只读的。最后的做法就是干脆让table包含在div中,然后替换包在表格外面的div的innerHTML。
select和option的操作:
清空select 的项
// document.all.objSelect.options.length = 0;
如果留下第一行的话就是
// document.all.objSelect.options.length = 1;
判断select选项中 是否存在Value="paraValue"的Item
function jsSelectIsExitItem(objSelect,objItemValue) { var isExit = false; for(var i=0;i<objSelect.options.length;i++) { if(objSelect.options[i].value == objItemValue) { isExit = true; break; } } return isExit; }
向select选项中 加入一个Item
function jsAddItemToSelect(objSelect,objItemText,objItemValue) { //判断是否存在 if(jsSelectIsExitItem(objSelect,objItemValue)) { alert("该Item的Value值已经存在"); } else { var varItem = new Option(objItemText,objItemValue); // objSelect.options[objSelect.options.length] = varItem; objSelect.options.add(varItem); alert("成功加入"); } }
从select选项中 删除一个Item
function jsRemoveItemFromSelect(objSelect,objItemValue) { //判断是否存在 if(jsSelectIsExitItem(objSelect,objItemValue)) { for(var i=0;i<objSelect.options.length;i++) { if(objSelect.options[i].value == objItemValue) { objSelect.options.remove(i); break; } } alert("成功删除"); } else { alert("该select中 不存在该项"); } }
修改select选项中 value="paraValue"的text为"paraText"
function jsUpdateItemToSelect(objSelect,objItemText,objItemValue) { //判断是否存在 if(jsSelectIsExitItem(objSelect,objItemValue)) { for(var i=0;i<objSelect.options.length;i++) { if(objSelect.options[i].value == objItemValue) { objSelect.options[i].text = objItemText; break; } } alert("成功修改"); } else { alert("该select中 不存在该项"); } }
设置select中text="paraText"的第一个Item为选中
function jsSelectItemByValue(objSelect,objItemText) { //判断是否存在 var isExit = false; for(var i=0;i<objSelect.options.length;i++) { if(objSelect.options[i].text == objItemText) { objSelect.options[i].selected = true; isExit = true; break; } } //Show出结果 if(isExit) { alert("成功选中"); } else { alert("该select中 不存在该项"); } }
设置select中value="paraValue"的Item为选中
//document.all.objSelect.value = objItemValue;
得到select的当前选中项的value
//var currSelectValue = document.all.objSelect.value;
得到select的当前选中项的text
//var currSelectText = document.all.objSelect.options[document.all.objSelect.selectedIndex].text;
得到select的当前选中项的Index
//var currSelectIndex = document.all.objSelect.selectedIndex;
完整例子
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>js控制select增删改,选中,清空, 判断控件是否存在</title>
<meta name="keywords" content="javascript select options text value add modify delete set">
<meta name="description" content="javascript select options text value add modify delete set">
<script language="javascript">
<!--
function watch_ini(){ // 初始
for(var i=0; i<arguments.length; i++){
var oOption=new Option(arguments[i],arguments[i]);
document.getElementById("MySelect")[i]=oOption;
}
}
function watch_add(f){ // 增加
var oOption=new Option(f.word.value,f.word.value);
f.keywords[f.keywords.length]=oOption;
}
function watch_sel(f){ // 编辑
f.word.value = f.keywords[f.keywords.selectedIndex].text;
}
function watch_mod(f){ // 修改
f.keywords[f.keywords.selectedIndex].text = f.word.value;
}
function watch_del(f){ // 删除
f.keywords.remove(f.keywords.selectedIndex);
}
function watch_set(f){ // 保存
var set = "";
for(var i=0; i<f.keywords.length; i++){
set += f.keywords[i].text + ";";
}
confirm(set);
}
//-->
</script>
</head>
<body>
<form name="watch" method="post" action="">
<select id="MySelect" name="keywords" size="10" οnchange="watch_sel(this.form)"></select><br>
<script language="javascript">
<!--
watch_ini("黑","色","头","发","紫","色","头","发"); // 初始关键词
//-->
</script>
<input type="text" name="word" /><br />
<input type="button" value="增加" οnclick="watch_add(this.form);" />
<input type="button" value="修改" οnclick="watch_mod(this.form);" />
<input type="button" value="删除" οnclick="watch_del(this.form);" />
<input type="button" value="保存" οnclick="watch_set(this.form);" />
</form>
</body>
</html>