使用Uploadify 时,同时使用了jQuery.Validition 验证控件时,在IE11上出现JS缺少对象错误。

场景:

  使用jQuery.1.8.2

  使用 Uploadify 3.2上传控件

  使用jQuery.Validition 1.9 验证

  

  

  使用IE 11 时,当鼠标点击上传按钮时,会出现JS 缺少对象错误。如下图:

错误定位在jQuery中.

  

排查后发现是引用了jQuery Validition 验证控件导致的。

在jQuery Validition控件初始化中,有下面一段代码:

$currentSection
                .validateDelegate(":text, [type=‘password‘], [type=‘file‘], select, textarea, " +
                    "[type=‘number‘], [type=‘search‘] ,[type=‘tel‘], [type=‘url‘], " +
                    "[type=‘email‘], [type=‘datetime‘], [type=‘date‘], [type=‘month‘], " +
                    "[type=‘week‘], [type=‘time‘], [type=‘datetime-local‘], " +
                    "[type=‘range‘], [type=‘color‘] ",
                    "focusin focusout keyup", delegate)
                .validateDelegate("[type=‘radio‘], [type=‘checkbox‘], select, option", "click", delegate);

你只要将这段代码注释掉,错误就会消失。

查看一下validateDelegate这个方法:

$.fn.validateDelegate= function(delegate, type, handler) {
		// 验证委托
		return this.on(type, function(event) {
			var target = $(event.target);
			if (target.is(delegate)) {
				return handler.apply(target, arguments);
			}
		});
	};

  

里面只是对元素绑定一下事件,没有什么特殊代码。

尝试在Html中移除了jQuery.validitioin插件后,在当前页面写入以下代码:

$("form").on("focusin focusout keyup",function(){
    // TODO:
});

  

这段代码也会导致上面说的问题。

因为是在jQuery上抛出的错误,定位到jQuery中:

acceptData: function( elem ) {
		var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];

		// nodes accept data unless otherwise specified; rejection can be conditional
		return !noData || noData !== true && elem.getAttribute("classid") === noData;
	}

  

注重调试到elem.getAttribute这个方法,在其它的元素上都没用问题,但是在获取object元素上,在IE11 这个上,getAttribute方法不存在为null,所以就会报出之前上述代码。

将代码加一个判断即可:

acceptData: function( elem ) {
		var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];

		// nodes accept data unless otherwise specified; rejection can be conditional
		return !noData || noData !== true && elem.getAttribute != null && elem.getAttribute("classid") === noData;
	}

  

我尝试使用jQuery 1.9和1.12都依然存在这个问题。所以只将1.8.2的代码更改了,其它还有一处碰到object这个元素都会有这个问题。

更改后的jquery 1.8.2 下载:

jquery-1.8.2-FIX_Object.getAttribute_is_Null Download

时间: 2024-08-24 06:48:30

使用Uploadify 时,同时使用了jQuery.Validition 验证控件时,在IE11上出现JS缺少对象错误。的相关文章

ASP.NET 验证控件报错:WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping。

在Visual Studio 2012中添加并使用验证控件时,可能会遇到如下的错误: WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping.请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping. 个人判断,出现这个错误的原因是,ASP.NET的验证控件前端会使用jQuery代码.但因为项目中并没有注册jQuery,故报此错误. 解决办法如下: 1.添加Global.asax文件

jquery 的前端验证控件应用(form www.sysoft.cc)

jquery validate验证控件真是挺 好用,功能不错,找好文档,使用也较方便呵,不错. <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Index</title> <script src="../../Scripts/jquery-1.4.1.js" type="text/ja

【转载】C#验证控件的使用方法(RegularExpressionValidator)的使用

ControlToValidate="要验证的控件名称" ValidationExpression="验证规则" ErrorMessage="所要显示的错误信息" 在使用RegularExpressionValidator验证控件时的验证功能及其验证表达式介绍如下: 只能输入数字:“^[0-9]*$” 只能输入n位的数字:“^\d{n}$” 只能输入至少n位数字:“^\d{n,}$” 只能输入m-n位的数字:“^\d{m,n}$” 只能输入零和非

ASP.NET的验证控件

在做机房收费系统的时候,为了验证文本框是否为空.用户是否存在.输入的是否合法等等,我们都要单独写代码,学习了ASP.NET的验证控件,省了很多事. ASP.NET可以轻松实现对用户输入的验证.让我们好好回顾一下ASP.NET公有的六种验证控件. 1.基本验证控件: (1)RequiredFieldValidator:限制空字段(必须字段验证) 用于检查是否有输入值 例子:比如登陆时,需要验证输入的用户名和密码是否为空 <asp:RequiredFieldValidator ID="Requ

ASP.Net 验证控件 RequiredFieldValidator

使用 ASP.NET 验证控件可在网页上检查用户输入.有用于各种不同类型验证的控件,例如范围检查或模式匹配验证控件.每个验证控件都引用网页上其他位置的输入控件(服务器控件).当处理用户输入时(例如,当提交网页时),验证控件会对用户输入进行测试,并设置属性以指示输入是否通过了测试.调用了所有验证控件后,会在网页上设置一个属性以指示是否出现验证检查失败. ASP.Net提供了如下的控件: •RequiredFieldValidator:字段必填: •RangeValidator:值在给定的最大值.最

几种验证控件

RequiredFieldValidator,CompareValidator,RegularExpressionValidator RequiredFieldValidator 是验证控件必须项的控件.一般包括TextBox,ComBox等. 常用属性有 ControlToValidate 要验证的控件ID ErrorMessage    验证无法通过时的提示信息 Text            控件无效时显示的文本 Display         显示方式 有三个值 None 表示控件无效时

ASP.NET中验证控件的使用

原文:ASP.NET中验证控件的使用 前言: 前几日,无奈用JS判断控件的有效性,发现的确是一件费力.费神的事情!特别是针对邮件格式.邮政编码等的关于正则表达式的JS验证(其中涉及正则表达式的比较等,较烦~).其实对于这些常用的控件有效性验证,在Asp.Net中有单独的验证控件可供使用.他们可以满足一般的,诸如非空,范围.比较等的验证. 验证控件: Asp.Net中内置的验证控件有:RequiredFieldValidation.RangeValidation.RegularExpressVal

jQuery验证控件validate使用

一导入js库 <script src="../js/jquery.js" type="text/javascript"></script> <script src="../js/jquery.validate.js" type="text/javascript"></script> 二.默认校验规则 (1)required:true                必输字段 (2)

VS2013验证控件出现 WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResour......的错误解决方案

错误如下: 解决方案如下: 方法一: 在webconfig中找到 <appSettings> <addkey="aspnet:UseTaskFriendlySynchronizationContext"value="true" /> <addkey="ValidationSettings:UnobtrusiveValidationMode"value="WebForms" /> </a