IE6下jQuery选中select的BUG

现在公司开发项目都是用jQuery,最近做联动下拉框时遇见个问题:在IE6下报错:“无法设置selected属性。未指明的错误”,而在其他浏览器中都顺利执行。


定位了下,是调用jQuery的val方法选中时出了问题,在调试时发现一个奇怪的现象,alert后是可以顺利执行的,于是尝试写个setTimeout延迟执行,结果可以解决问题。在网上找了下,原因如下:

Note that the error will only occur if you callappendChild, then ask for theselect'schildNodes, then set theselectedproperty on the newly createdoption. If you setselectedearlier, either beforeappendChildor after it, there's no problem. And if you omitchildNodes, it works. The problem with jQuery is that its.val()function loops overchildNodeslooking for an option to set, and thus always triggers the bug.

顺便看了下jQuery(1.8.0)源代码:
set: function( elem, value ) {
    var values = jQuery.makeArray( value );
    jQuery(elem).find("option").each(function() {
        this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
    });
    if ( !values.length ) {
	elem.selectedIndex = -1;
    }
    return values;
}
看来也只能用setTimeout的方式解决了,于是封装了个方法:
setSelectVal:function(sel,value){
    if($.browser.msie && $.browser.version=="6.0") { 
	setTimeout(function(){ 
	     sel.val(value); 
        },1); 
    }else { 
	 sel.val(value); 
    } 
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
说明 这个控件实现相当简单,基于jQuery实现,只编写一些基本功能,满足一般使用。提供原代码,可以根据自己的项目要求修改,只在IE6、IE7、IE8、IE9中测试。有问题联系邮箱:zliuyao2010@163.com 初始化构造 构造方法在:input表单添加class="e_select"属性 属性说明:class="e_select" 构造下拉框 属性说明:etop="0" 控件下图片位置,默认可以不用添加此属性。 属性说明:edata="{,普通:普通AA,模糊:模糊,右边模糊:右边模糊}" or {"":"","男":"男1","女":"女1","其他":"其他1"} 下拉框控件中的,注意:支持两种赋,json格式以及键对形式,PS:若下拉列表中有空键对用英文的“,”,json格式用:"":""。 属性说明:echange="echange" 选择下拉的回调方法名称,PS:只要输入方法名称,调用方法中有两个参数key(键) 和 value() 例如:function echange(key,value) {alert(key + " " + value);} 动态赋 function setValue() { jQuery("#text1").val("").attr("data","");//赋请清空原来的(很重要) jQuery("#text1").attr("edata",'{"":"","男":"男1","女":"女1","其他":"其他1"}'); } 获取 function getValue() { alert("key:"+document.getElementById("text1").value + " value:" + document.getElementById("text1").data); } 事件 function echange(key,value) { alert("key:"+key + " " + "value:"+value); } 测试 省: 市: 区: 普通模糊右边模糊普通模糊右边模糊普通模糊右边模糊

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值