jquery ie8下无法更新下拉框
代码作用基本上是一个过滤器,根据后面表格中的东西逐个字段内容过滤,问题出在 $("[base="+filterdec.base+"]").html(""); 也就是test按钮中的脚本 我在按钮中执行之后,在下拉第一个框,日期就跟着变,若不手动清空,内容变,但是下拉的内容不变。ff4中正常 而且我也确认上面的语句执行了,可就是和想的不一样。 另外,发现如果在执行过程中出现alert,一些代码就不执行了。我现在不知道是jquery的问题还是ie的问题。 请各位周末抽时间指教,谢谢。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title> New Document </title> <meta name="Generator" content="EditPlus"> <meta name="Author" content="Rodger Yuan"> <meta name="Keywords" content=""> <meta name="Description" content=""> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript" src="http://localhost/js/jquery/jquery-1.6.js"></script> <script type="text/javascript"> <!-- /*//预定义控件 格式: 字段名:{ label:标签名,显示在控件前,必选 id:识别符,必选 tag:何种控件 type:何种控件 } */ var condefs={ "线名":{ label:"线名", id:"con_xianming", tag:"select", textdata:"线编号", valueoff:-1, type:"" }, "行别":{ label:"行别", id:"con_xingbie", tag:"select", valueoff:0, type:"" }, "日期":{ label:"日期", id:"con_riqi", tag:"select", value:"", valueoff:0, type:"text" }, "终止里程":{ label:"里程", id:"con_licheng", tag:"input", value:"test", valueoff:-1, type:"text" } }; //转换对象属性为属性字符串 function getAttrString(o){var result="";for (var a in o ){if(o[a]!='null')result+=" "+a+"='"+o[a]+"'";}return result;} //给出dom对象和属性名称,返回属性值,简短函数名称 function ga(dom,attr){return dom.getAttribute(attr);} //给出dom元素,返回一个包含其属性的对象 function go(dom){var obj={};var l=dom.attributes.length;for (var i=0;i<l;i++ ) {obj[dom.attributes[i].name]=dom.attributes[i].value; }return obj;} $("document").ready(function(){ //隐藏数据表 //$("#selectdata").hide(); if($("#selectdata")){ // 遍历数据字段,创建对应的组件 $("th").each(function(a,b){ if(condefs[this.getAttribute("title")]){ var con=condefs[this.getAttribute("title")]; $("<span tool='label'>"+con.label+":</span><"+ con.tag+" tool='filter' base="+a+ getAttrString(con)+"/>").appendTo($("#filterdiv")); } }) } updateData(0); $("[tool=filter]").change(function(){ updateData(parseInt(ga(this,"base")));}); }); function updateData(base){ var selector=""; $("[tool=filter]").each(function(a,b){ if (parseInt(ga(this,"base"))<=parseInt(base)) { selector+="[attr"+(parseInt(ga(this,"base"))+parseInt(ga(this,"valueoff")))+"="+this.value+"]"; }else{ $("#output").append(ga(b,"id")+":"+$("#"+ga(b,"id")).html("")+"<br>"); /*for (var i;i<this.children.length;i++) { this.removeChild(this.children(0)); } */ } }); var s=base>0?selector:"tr[attr0]"; $("#output").append(s+":"+$(s).length+"<br>"); $("[tool=filter]").each(function(){ var filterdec= go(this); var filtertype=filterdec.tag; var result=[]; if(parseInt(base)<parseInt(filterdec.base)){ $("[base="+filterdec.base+"]").html(""); $(s).each(function(){ var row=this; if (filtertype=="select") { var html="<option value='"+ ga(row,"attr"+(parseInt(filterdec.base)+parseInt(filterdec.valueoff))) +"'>"+ga(row,"attr"+filterdec.base); if(jQuery.inArray(html,result)==-1){ $("[base="+filterdec.base+"]").append(html); result.push(html); } }else if (filtertype=="input") { //alert("i"); } }); } }) } //--> </script> </head> <body> <form id="filterdiv" class=""> </form> <div id="output" class=""> </div> <select name=""> <option value="1" selected>name1 <option value="2">name2 <option value="3">name3 <option value="4">name4 <option value="5">name5 </select><input type="button" value="结果" onclick='$("#results").append( "<tt>" + $("form").serialize() + "</tt>" );'> <input type="button" value="test" onclick='$("#con_riqi").html("");'> <input type="button" value="clear" onclick='$("#output").html("");'><div id="results" class=""> <div id="results" class=""> </div> <table id="selectdata"> <th title="线编号" alt="dd" /><th title="线名" /><th title="行别" /><th title="日期" /><th title="起始里程" /><th title="终止里程" /> <tr attr0='0002' attr1='京沪' attr2='下' attr3='20110601' attr4='0' attr5='260.5'/> <tr attr0='0008' attr1='沪昆' attr2='下' attr3='20110531' attr4='0' attr5='104'/> <tr attr0='0008' attr1='沪昆' attr2='下' attr3='20110530' attr4='0' attr5='396.3'/> <tr attr0='0634' attr1='宣杭' attr2='下' attr3='20110529' attr4='0' attr5='118.9'/> <tr attr0='0636' attr1='萧甬' attr2='下' attr3='20110528' attr4='0' attr5='146.7'/> <tr attr0='0613' attr1='金温' attr2='单' attr3='20110527' attr4='0' attr5='252.2'/> <tr attr0='0612' attr1='宁启A线' attr2='单' attr3='20110526' attr4='0' attr5='282.761'/> <tr attr0='0647' attr1='新长' attr2='单' attr3='20110525' attr4='0' attr5='557.575'/> <tr attr0='0001' attr1='京广' attr2='下' attr3='20110524' attr4='0' attr5='133.306'/> <tr attr0='0001' attr1='京广' attr2='下' attr3='20110523' attr4='0' attr5='132'/> <tr attr0='2001' attr1='迁曹' attr2='下' attr3='20110522' attr4='0' attr5='119.029'/><tr attr0='0539' attr1='胶新' attr2='单' attr3='20110423' attr4='0' attr5='137'/> <tr attr0='0002' attr1='京沪' attr2='下' attr3='20110422' attr4='0' attr5='257.3'/> <tr attr0='0644' attr1='合九' attr2='单' attr3='20110421' attr4='0' attr5='280'/> <tr attr0='3005' attr1='沪蓉' attr2='下' attr3='20110420' attr4='0' attr5='176.7'/> <tr attr0='0373' attr1='石德' attr2='下' attr3='20110419' attr4='0' attr5='170.7'/> </table> </body> </html>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
自己回一下吧。
最终发现应该是ie8把一些可视化的东西缓存了,也就是在外观不变化的情况下,下拉框下拉出来的部分不变。
在清空语句前后增加了.hide() 和.show()就解决了,没发现闪烁的情况,控件多了不知道会不会有闪烁,真是……无语了。
谢谢,我试了,8仍旧不行,6可以。 该死的ie
属性选择器没有加所属标签也可以吗?
加上试试,
$(con.tag+"[base="+filterdec.base+"]").html("");
或者不行,换回1.5试一下,之前我们升级1.6就发现有很多BUG,后来又换回来了。