今天郁闷了大半天,从下午1点多开始到4点多,一直被一个JS的问题困扰,后来终于解决,写下作为笔记供自己以后查看吧。

  问题背景:自己写了一个多级联动的控件,其实加载数据均采用jQuery的ajax+json方式来调取和填充,方法如下:

$.getJSON("/Ajax/xxx.ashx", { "action": "xx", "parentid": parentId, "r": Math.random() }, function (data) {
    $.each(data.codelist, function () {
        $("#sel_xx").append(sp.format("<option value=\"{0}\">{1}</option>", this.Id, this.Title));
    });
    if (_val != "")
        $("#sel_xx").val(_val); //设置默认值--就是这在出的问题
    $("#sel_xx").change();
});

  以上方法在IE7、IE8、火狐、Google等浏览器中测试均正常,默认值可以正常加载。可以在IE6中测试时出现了如下错误:
IETester中:
纯IE6中:

想必上面的错误大家也碰到过,网上也有很多“解决”办法,但是都不能最终性的解决问题,这里简单的列出作为对比吧(这样映像会更深刻):

方法1,使用这种赋值方法:(不能解决)

$("#sel_xx option[value='" + _val + "']").attr("selected", true);

方法2,使用setTimeout延时一下,这种时好时坏,(也不能解决)

setTimeout(function () {
    if (_val != "")
        $("#sel_xx").val(_val);
    $("#sel_xx").change();
}, 100);

……还有好多,我一一都试了,无法解决。

  
  问题分析与解决方案:在IE6中出现这种错误的根本原因是,其DOM加载的原理与其它浏览器有些不一样,的确存在延时的问题,上面我们是先向select表单填写了option选项,然后即刻对其设置了selected属性值,在IE6中不能这样做,那么我们如何解决呢?就是在向select表单填写option选项的同时,将selected属性一并赋上。方法如下:

$.getJSON("/Ajax/xxx.ashx", { "action": "xx", "parentid": parentId, "r": Math.random() }, function (data) {
    $.each(data.codelist, function () {
        $("#sel_xx").append(sp.format("<option value=\"{0}\"{2}>{1}</option>", this.Id, this.Title, this.Id == _val ? " selected=\"selected\"" :""));
    });
    if (_val != "")        $("#sel_xx").val(_val);    $("#sel_xx").change();
});

  问题完美解决。
 
  上面代码中sp.format是自定义的方法,其功能类似于.net中的format,在此将方法分享给大家:

//格式化字符串,与.net类似
function format() {
    if (arguments.length == 0) return null;
    var str = arguments[0];
    for (var i = 1; i < arguments.length; i++) {
        var re = new RegExp('\\{' + (i - 1) + '\\}', 'gm');
        str = str.replace(re, arguments[i]);
    }
    return str;
}

转载于:https://www.cnblogs.com/greatwang/archive/2012/08/27/2711807.html

JavaScript之Unspecified error或无法设置selected属性。未指明的错误。解决方案相关推荐

  1. Scala ERROR: forward reference extends over definition of value xxx——错误解决方案

    项目编译打包时的错误,有点莫名其妙.网上找了一些问题原因,稍微记录一下: 1,方法调用和定义间插入了val的定义 you're calling a method before you define i ...

  2. Error opening/initializing the selected video_out (-vo) device.

    mplayer error opening/initializing the selected video_out (-vo) device ubuntu的Mplayer老是出现这样的错误. Erro ...

  3. JavaScript学习(十一)—selected属性、checked属性、class属性的操作

    JavaScript学习(十一)-selected属性.checked属性.class属性的操作 对于checked属性.selected属性,如果要表示选中状态,则将他们的值设置为true,如果要表 ...

  4. mplayer error opening/initializing the selected video_out (-vo) device

    Error opening/initializing the selected video_out (-vo) device 没有办法播放视频.其实解决的方法很简单: 打开MPLAYER. 右击 选择 ...

  5. 虚拟许可服务器访问失败,星外虚拟主机访问被控出现Unspecified error解决方法

    今天客户在线解压出现了Unspecified error 的错误,我以为是被控的权限,重新重置了受控端依然不行,访问被控依然正常,但http://受控域名/freehost.dll就出现错误,看样子不 ...

  6. linux sqlncli 乱码,SQL SERVE报错SQLNCLI 返回了消息 Unspecified error

    今天在做64位SQL SERVR2005+SP3连接32位SQL SERVER2000 遇到如下错误 链接服务器"SHKQ"的 OLE DB 访问接口 "SQLNCLI& ...

  7. Access数据库出现的0x80004005 Unspecified error问题

    Access数据库出现的0x80004005 Unspecified error问题及解决方案. [OleDbException (0x80004005): Unspecified error] 项目 ...

  8. 【Ubuntu-Opencv】Ubuntu14.04 Opencv3.3.0 使用中出现OpenCV Error: Unspecified error

    问题描述: ubuntu@ubuntu:~/opencv-3.3.0/cpp_luckynote/opencv_lena$ ./DisplayImage ../lfw/Anna_Chicherova/ ...

  9. php property 获取,JavaScript中如何获取和设置property属性代码详解

    JavaScript中对象的property有三个属性: 1.writable.该property是否可写. 2.enumerable.当使用for/in语句时,该property是否会被枚举. 3. ...

最新文章

  1. Ubuntu 安装 Etcd
  2. 项目开发中关于jquery中出现问题小结(textarea,disabled,关键字等)
  3. Android实训日志:基于外部存储的音乐播放器V04
  4. 分布式系统中的限流与熔断
  5. springboot整合图像数据库Neo4j
  6. 《中秋书月》月圆之夜,我和德鲁克
  7. Sqlserver 数据库安全
  8. python学习-装饰器(decorator)
  9. 【Nacos】Nacos MySQL 配置后无法登录 愚蠢的问题
  10. Drools 6.5 :入门程序
  11. 字符串+流+java_Java读取流并拼接转换成字符串
  12. C/C++ Bug记录
  13. python中的框架、库、包、模块都是什么意思_Python中的import,from...import以及模块、包、库的概念...
  14. tensorflow函数介绍(3)
  15. 西门子PLC usb编程电缆驱动
  16. wps怎么免费导出简历_简历怎么写 简历模板word免费下载
  17. 快速集成Android实现下拉刷新上拉加载更多
  18. java判断list中是否包含某个值_java判断list是否包含某个值
  19. ccf-csp历届第一题题解 (一)14-17年 (ง •_•)ง
  20. OpenCV颜色空间——Lab颜色空间

热门文章

  1. SpringBoot(十二):springboot如何测试打包部署
  2. ASP.NET Core 2.1 源码学习之 Options[1]:Configure
  3. 技巧.自己学会取名字,学会欣赏
  4. LeetCode 56. Merge Intervals
  5. MSP430学习笔记5-利用蜂鸣器演奏音乐
  6. Java数据结构2:堆排序思考
  7. java 报文请求_http 请求报文和响应报文编写 (java socket实例)
  8. mysql 添加int列_在MySQL中现有的int列的值中添加字符?
  9. 如何找出电脑里的流氓软件_啥拦截软件都挡不住?教你一键揪出乱弹窗的流氓软件...
  10. php代码结构,如何优化php代码结构