JQuery的奇怪问题;

来源:互联网 发布:淘宝未激活官换机骗局 编辑:程序博客网 时间:2024/05/16 17:00

今天公司又有一个新需求,对于客户,可以进行设置 黑名单 客户的操作;

并且,对于所有的显示有客户名称的页面,均必须添加 图标提示 或者 红色文字提示;

这个比较晕菜,很多页面都显示有客户名称,但黑名单是新的信息,原来的查询没有;

找出所有的页面来一个个修改?觉得这种做法太傻了;

想了另外一个办法,所有的页面均会加载一个脚本 script_object.js,于是就在这个脚本上做文章了;

想法是这样的, 动态加载 jquery 脚本库,动态加载 ajax库;

创建函数,对于传入的客户名称选择字符串,利用ajax库进行数据库判断,如果是黑名单客户,动态添加图标 或者 红色文字提示;

想法很好,代码也写的很快,放上去后,奇怪的问题发生了,在IE8上,调试时不停的报jquery的脚本错误,但最后能够显示图标;

不调试时,也有脚本错误,但图标显示不出来;

代码如下,呵呵,有些长,不过还比较容易看;

/**加载脚本文件, judge:判断条件,脚本可能已经加载,此时不用加载该脚本了;
     url - script的url;
     callback - 脚本加载完成时候的回调函数: 
 **/
function loadScriptX(judge, url, callback) {
   if (!judge) {  /**脚本未加载**/
//url = url + "?" + Math.random();
var script = document.createElement("script")
script.type = "text/javascript";
if (script.readyState) {//IE
script.onreadystatechange = function () {
if (script.readyState == "loaded" || script.readyState == "complete") {
script.onreadystatechange = null;
callback();
}
};
}
else {//Others
script.onload = function () {
callback();
};
}
script.src = url;
document.getElementsByTagName("head")[0].appendChild(script);
    }
    else {  /**已经加载**/
        callback();
    }
}


var loadedFullScript = false;
/****顺序动态加载脚本文件****/
function serialLoadScript(scriptInfo, iIndex) {
    var index = iIndex;
    if (!iIndex) index = 0;
    if (index >= scriptInfo.length) {        
        loadedFullScript = true;
        return;        
    }    
    loadScriptX(scriptInfo[index].judge, scriptInfo[index].url, function () {
        serialLoadScript(scriptInfo, ++index);
    });
}


serialLoadScript(new Array({judge:window.$, url:"/crm_vss/SalesOpp/jquery-1.4.2.js"},
{judge:window.addNamespace, url:"/crm_vss/SalesOpp/core.js"},
{judge:window.crm_vss02, url:"/crm_vss/SalesOpp/ajaxHandle.js"}));


 /****添加黑名单提示***/
function addHmdTips(khmcselect, tipsselect){
        if (!loadedFullScript ) return;
        window.clearInterval(addHmdTipsHandle);
        var khmcsel = $(khmcselect);
        var tipssel = $(tipsselect);
        khmcsel .each(function(index){
            var akhmc= $(this).val();
            if (!akhmc) akhmc= $(this).text();
            var hmdquery = crm_vss02.SalesOpp.ContactHandle_Ajax.isHmd(new Array("khmc", akhmc)).value;
            if (hmdquery){
                 var aimg = "<img src='/crm_vss/image/pointblack.gif' border='0' title='"+decodeURIComponent('%e9%bb%91%e5%90%8d%e5%8d%95')+"'>";
                 $(tipssel [index]).append(aimg);
            }
        });  
}
    
var addHmdTipsHandle ;
document.attachEvent("onreadystatechange", function(){
    //这儿必须用定时器,否则,上面的脚本还没有正确加载;
    addHmdTipsHandle = window.setInterval(function(){   addHmdTips(".khdm","#dg td[cellIndex=3]:gt(0)");    }, 100);

}); 


然后发现,错误的行代码发生在 jquery-1.4.2.js的2828行,
if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {

用调试器一看,Expr.leftMatch[ type ]返回的对象居然没有 exec方法,然后脚本就不停的出错了;

用 try 。。。 catch...把整段包含,呵呵,居然运行正常通过了;