直接说问题吧:
刚上线的网站一拍天下 IE6下面,引用jquery.validate.js出现:
我把页面的其他代码都干掉,只保存了jquery.validate.js的引用,还是出现此问题。基本断定jquery.validate.js在IE6下有兼容性问题,且我去官方下载了1.8.1版本,还是有此问题,只有老老实实找出问题所在了。
问题所在
最后,我注释掉了一段代码,发现不出错误了:
/*
// ajax mode: abort
// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});
// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()
; (function ($) {
var ajax = $.ajax;
var pendingRequests = {};
$.ajax = function (settings) {
// create settings for compatibility with ajaxSetup
settings = $.extend(settings, $.extend({}, $.ajaxSettings, settings));
var port = settings.port;
if (settings.mode == "abort") {
if (pendingRequests[port]) {
pendingRequests[port].abort();
}
return (pendingRequests[port] = ajax.apply(this, arguments));
}
return ajax.apply(this, arguments);
};
})(jQuery);
*/
猛一看,也没什么问题。没别的招,一句代码一句的注释掉,发现问题竟在:
“return ajax.apply(this, arguments);”
这就让我更疑惑了,很正常的语法啊。加了一个debuger ,在IE9 下调试跟踪了一下,发现arguments里面的上下文调用的函数,是自己写的业务方法,里面有中文编码。
大概闻着味了,这好像是IE6里面常见的一个问题。
再看此方法是对jQuery.ajax的mode 为 abort的重写,www.yipaitx.net 暂时也没有用到此属性,先干掉此代码段吧。暂时解决此问题,具体原因需要了解,jQuery, jquery.validate.js 中编码相关的处理,就能解决了。暂且留下,待研究.....