一个是写的级联控件,在动态创建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" onchange="watch_sel(this.form)"></select><br>
<script language="javascript">
<!--
watch_ini("黑","色","头","发","紫","色","头","发"); // 初始关键词
//-->
</script>
<input type="text" name="word" /><br />
<input type="button" value="增加" onclick="watch_add(this.form);" />
<input type="button" value="修改" onclick="watch_mod(this.form);" />
<input type="button" value="删除" onclick="watch_del(this.form);" />
<input type="button" value="保存" onclick="watch_set(this.form);" />
</form>
</body>
</html>
分享到:
相关推荐
今天做东西遇到一个问题,我试图动态为一个表格添加多行数据,先定义了一个table: 代码如下: <table> <thead> </thead> ”filelist”> </tbody> </table> 然后在JavaScript 中这样操作: 代码如下: for(var i in ...
首先时飘忽不定的collapse的border,ie6偏偏...排查了半天,结果是IE的table元素为只读,不能使用innerHTML!!!! 同样为只读的元素还有COL, COLGROUP, FRAMESET, HTML, STYLE, TABLE, TBODY, TFOOT, THEAD, TITLE, T
innerHTML的简单应用
IE6-IE9中tbody的innerHTML不能赋值,重现代码如下 Js代码 <!DOCTYPE html> <html> <head> <meta charset=utf-8/> <title>IE6-IE9中tbody的innerHTML不能复制bug</title> </...
innerHTML的使用document.getElementById("id").innerHTML = "contenttext";
tbody[removed]='<tr><td>IE下tbody的innerHTML是只读的</td></tr>’; //在IE下报错,目标对象错误 现在用jquery的html试试, 代码如下: $(tbody).html(‘<tr><td>IE下tbody的innerHTML是只读的</td></tr>’); ...
我们在用javascript创建一个遮盖层(div)后,如果点击关闭用到了
博文链接:https://aideqianfang.iteye.com/blog/246585
最近发现各大类库都能利用xxx[removed]=HTML片断来生成节点元素,再把它们插入到目标元素的各个位置上。这东西实际上就是insertAdjacentHTML,但是IE可恶的innerHTML把这优势变成劣势。
解决ajax返回innerHTML中javascript不能运行问题
前言: 这是一个老bug了,现在提供一个完美... bug描述: 在ie下面使用innerHTML来插入option选项的话,ie会去掉前面的,并拆分成多个节点,这样会造成select的出错,不是没有插进去,而是节点在转换时出问题了,微软对
js中innerHTML与innerText的用法与区别
这主要是IE在对innerHTML进行写操作的时候会检查element是否具备做为这些内容中html对象容器的要求,比如如果你是在一个p里加入包含的html代码,这是会出错的。所以如果你发现这些错误出现,尝试做两件事情: 1、...
主要介绍了innerHTML在IE中报错解决方案,需要的朋友可以参考下
就比如在IE下面。 看如下代码: 复制代码代码如下: ’22’> </tbody> 我们现在想通过innerHTML属性给tbody中间加入等HTML代码,会这么做: 复制代码代码如下: <span xss=removed>document.getElementById(’22’...
超全面javaweb第4天-_08_innerHTML属性
NULL 博文链接:https://wuzhengxuan.iteye.com/blog/1263906