`

jquery报错: '$.DATA(...).SETTINGS' 为空或不是对象

阅读更多
How to perform function after Jquery (window).load is complete:
http://stackoverflow.com/questions/5416209/how-to-perform-function-after-jquery-window-load-is-complete
引用
$(window).load( function() {
        //do something    
    });



关于$(document).ready 和 $(window).load 的区别:
http://wuaner.iteye.com/admin/blogs/319769


下列代码会报该js错误:
$(document).ready(function() {

	$.validator.methods.atLeastOneChannel = function(value, element, param) {
		var n = 0;
		$("select").each(function (i) {
	        if (this.id == "fidsDispTempdataList.channelid" && this.value != "") {
		      	///alert(this.id + "    " + this.value);
		      	n+=1;
		     }
	     });
		return n >= 1;
	};
	
	
	$.validator.addClassRules("intClass", {
		digits:true
	});
	
     
	$("select").change(function () {
		if($(this).attr("id") == "fidsDispTempdataList.channelid") {
			///alert($(this).val());
			var curStartNumNode = $(this).parent().next().next().children().get(0);
			//var curPerPageNumNode = $(this).parent().next().next().next().next().children().get(0);
			//var curPagesNode = $(this).parent().next().next().next().next().next().next().children().get(0);
			var curPagesNode = $(this).parent().next().next().next().next().children().get(0);
			if($(this).val() == "") {
				$(curStartNumNode).rules("remove");
				//$(curPerPageNumNode).rules("remove");
				$(curPagesNode).rules("remove");
			} else {
				$(curStartNumNode).rules("add", {required: true});
				//$(curPerPageNumNode).rules("add", {required: true});
				$(curPagesNode).rules("add", {required: true});
			}
		}
	});
	
	
	//在遍历页面select时出的错
	$('select').each(
	   	function(){
	      	if($(this).attr("id")=="fidsDispTempdataList.channelid" && $(this).val()!="") {
		      	///alert($(this).val());
		      	var curStartNumNode = $(this).parent().next().next().children().get(0);
				//var curPerPageNumNode = $(this).parent().next().next().next().next().children().get(0);
				//var curPagesNode = $(this).parent().next().next().next().next().next().next().children().get(0);
				var curPagesNode = $(this).parent().next().next().next().next().children().get(0);
				try { 
					$(curStartNumNode).rules("add", {required: true});
					$(curPagesNode).rules("add", {required: true});
				} catch( error ) { 
					alert(error.message);
				}
		    }
	});
    
    
	$("#templateForm").validate({
		rules: {
			"fidsDispTemplate.code": {
				required: true
			},
			"fidsDispTemplate.name": {
				required: true
			},
			"fidsDispTemplate.mainPage": {
				required: true
			},
			"channelSpan" : {
				atLeastOneChannel : true
			}
		},
		messages: {
			"fidsDispTemplate.code": {
				required: "<s:text name='template.validation.code.required'/>"
			},
			"fidsDispTemplate.name": {
				required: "<s:text name='template.validation.name.required'/>"
			},
			"fidsDispTemplate.mainPage": {
				required: "<s:text name='template.validation.mainPage.required'/>"
			},
			"channelSpan" : {
				atLeastOneChannel : "<s:text name='template.validation.atLeastOneChannel'/>"
			}
		},
		errorPlacement: function(error, element) {
			///alert(element.attr("className"));
	     	if (element.attr("className") == "intClass error") {
		     	///error.insertBefore(element);
		     	return true;
	     	} else {
	       		error.insertAfter(element);
			}
		}
	});
	
});


经研究发现,是页面dom元素加载顺序导致的该问题。解决办法两个:
一 将遍历select元素并对其做操作的出错代码 $('select').each()放至$("#templateForm").validate()之后(即$(document).ready()的最后面):
$(document).ready(function() {

	$.validator.methods.atLeastOneChannel = function(value, element, param) {
		var n = 0;
		$("select").each(function (i) {
	        if (this.id == "fidsDispTempdataList.channelid" && this.value != "") {
		      	///alert(this.id + "    " + this.value);
		      	n+=1;
		     }
	     });
		return n >= 1;
	};
	
	
	$.validator.addClassRules("intClass", {
		digits:true
	});
	
     
	$("select").change(function () {
		if($(this).attr("id") == "fidsDispTempdataList.channelid") {
			///alert($(this).val());
			var curStartNumNode = $(this).parent().next().next().children().get(0);
			//var curPerPageNumNode = $(this).parent().next().next().next().next().children().get(0);
			//var curPagesNode = $(this).parent().next().next().next().next().next().next().children().get(0);
			var curPagesNode = $(this).parent().next().next().next().next().children().get(0);
			if($(this).val() == "") {
				$(curStartNumNode).rules("remove");
				//$(curPerPageNumNode).rules("remove");
				$(curPagesNode).rules("remove");
			} else {
				$(curStartNumNode).rules("add", {required: true});
				//$(curPerPageNumNode).rules("add", {required: true});
				$(curPagesNode).rules("add", {required: true});
			}
		}
	});
	
    
	$("#templateForm").validate({
		rules: {
			"fidsDispTemplate.code": {
				required: true
			},
			"fidsDispTemplate.name": {
				required: true
			},
			"fidsDispTemplate.mainPage": {
				required: true
			},
			"channelSpan" : {
				atLeastOneChannel : true
			}
		},
		messages: {
			"fidsDispTemplate.code": {
				required: "<s:text name='template.validation.code.required'/>"
			},
			"fidsDispTemplate.name": {
				required: "<s:text name='template.validation.name.required'/>"
			},
			"fidsDispTemplate.mainPage": {
				required: "<s:text name='template.validation.mainPage.required'/>"
			},
			"channelSpan" : {
				atLeastOneChannel : "<s:text name='template.validation.atLeastOneChannel'/>"
			}
		},
		errorPlacement: function(error, element) {
			///alert(element.attr("className"));
	     	if (element.attr("className") == "intClass error") {
		     	///error.insertBefore(element);
		     	return true;
	     	} else {
	       		error.insertAfter(element);
			}
		}
	});
	
	
	//将该段遍历页面select的出错代码移至ready()方法的最后,错误不再出现
	$('select').each(
	   	function(){
	      	if($(this).attr("id")=="fidsDispTempdataList.channelid" && $(this).val()!="") {
		      	///alert($(this).val());
		      	var curStartNumNode = $(this).parent().next().next().children().get(0);
				//var curPerPageNumNode = $(this).parent().next().next().next().next().children().get(0);
				//var curPagesNode = $(this).parent().next().next().next().next().next().next().children().get(0);
				var curPagesNode = $(this).parent().next().next().next().next().children().get(0);
				try { 
					$(curStartNumNode).rules("add", {required: true});
					$(curPagesNode).rules("add", {required: true});
				} catch( error ) { 
					alert(error.message);
				}
		    }
	});
});



二 将将遍历select元素并对其做操作的出错代码从$(document).ready()中抽出来,放到$(document).ready()下面的$(window).load()中:
$(document).ready(function() {

	$.validator.methods.atLeastOneChannel = function(value, element, param) {
		var n = 0;
		$("select").each(function (i) {
	        if (this.id == "fidsDispTempdataList.channelid" && this.value != "") {
		      	///alert(this.id + "    " + this.value);
		      	n+=1;
		     }
	     });
		return n >= 1;
	};
	
	
	$.validator.addClassRules("intClass", {
		digits:true
	});
	
	
	$("select").change(function () {
		if($(this).attr("id") == "fidsDispTempdataList.channelid") {
			///alert($(this).val());
			var curStartNumNode = $(this).parent().next().next().children().get(0);
			//var curPerPageNumNode = $(this).parent().next().next().next().next().children().get(0);
			//var curPagesNode = $(this).parent().next().next().next().next().next().next().children().get(0);
			var curPagesNode = $(this).parent().next().next().next().next().children().get(0);
			if($(this).val() == "") {
				$(curStartNumNode).rules("remove");
				//$(curPerPageNumNode).rules("remove");
				$(curPagesNode).rules("remove");
			} else {
				$(curStartNumNode).rules("add", {required: true});
				//$(curPerPageNumNode).rules("add", {required: true});
				$(curPagesNode).rules("add", {required: true});
			}
		}
	});
	
	
	$("#templateForm").validate({
		rules: {
			"fidsDispTemplate.code": {
				required: true
			},
			"fidsDispTemplate.name": {
				required: true
			},
			"fidsDispTemplate.mainPage": {
				required: true
			},
			"channelSpan" : {
				atLeastOneChannel : true
			}
		},
		messages: {
			"fidsDispTemplate.code": {
				required: "<s:text name='template.validation.code.required'/>"
			},
			"fidsDispTemplate.name": {
				required: "<s:text name='template.validation.name.required'/>"
			},
			"fidsDispTemplate.mainPage": {
				required: "<s:text name='template.validation.mainPage.required'/>"
			},
			"channelSpan" : {
				atLeastOneChannel : "<s:text name='template.validation.atLeastOneChannel'/>"
			}
		},
		errorPlacement: function(error, element) {
			///alert(element.attr("className"));
	     	if (element.attr("className") == "intClass error") {
		     	///error.insertBefore(element);
		     	return true;
	     	} else {
	       		error.insertAfter(element);
			}
		}
	});
}); //the end of $(document).ready()




$(window).load( function() {
	$('select').each(
	   	function(){
	      	if($(this).attr("id")=="fidsDispTempdataList.channelid" && $(this).val()!="") {
		      	///alert($(this).val());
		      	var curStartNumNode = $(this).parent().next().next().children().get(0);
				//var curPerPageNumNode = $(this).parent().next().next().next().next().children().get(0);
				//var curPagesNode = $(this).parent().next().next().next().next().next().next().children().get(0);
				var curPagesNode = $(this).parent().next().next().next().next().children().get(0);
				try { 
					$(curStartNumNode).rules("add", {required: true});
					$(curPagesNode).rules("add", {required: true});
				} catch( error ) { 
					alert(error.message);
				}
		    }
	});
});
分享到:
评论

相关推荐

    详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON()

    而Jquery库提供了一系列封装好的Ajax函数,如$.get(), $.post(), $.ajax(), 和$.getJSON(),这些函数简化了前端开发者与后端数据交互的过程。 ### 1. $.get() `$.get()`函数是最简单的一种异步请求方式,它发送一...

    解决jquery插件:TypeError:$.browser is undefined报错的方法

    1. jQuery插件报错问题:在使用jQuery插件时可能会遇到"TypeError: $.browser is undefined"的报错,这主要是因为从jQuery 1.9版本开始,jQuery移除了$.browser和$.browser.version这两个用于获取浏览器基本信息的...

    jquery $.post()的用法 传递json文本 客户端和服务器端相互传递

    ### jQuery $.post() 方法详解与 JSON 数据交互 在现代 Web 开发中,客户端与服务器端的数据交换是非常重要的一个环节。jQuery 提供了多种 AJAX 方法来简化这一过程,其中 `$.post()` 是一种常用的方式来实现客户端...

    解决JQurey跨域问题$.get|$.post|$.getJSON等等统统可跨域

    本篇将详细介绍如何解决jQuery跨域问题,涉及的方法包括$.get、$.post和$.getJSON等。 首先,我们需要理解什么是跨域。同源策略是浏览器为保障安全而实施的一项机制,它规定JavaScript只能访问与当前页面同源(协议...

    Jquery实现$.fn.extend和$.extend函数_.docx

    在JavaScript中,jQuery库提供了两种扩展对象的方法,即`$.fn.extend`和`$.extend`。它们都用于增加或修改现有对象的功能,但应用场景不同。本文将深入解析这两种方法的实现原理和用途。 首先,`$.fn.extend`是用于...

    jquery $.fn.extend

    `$.fn.extend`是jQuery库中的一个核心方法,主要用于扩展jQuery对象的方法集合。这个方法允许开发者自定义jQuery的函数,从而实现对DOM元素的操作或添加新的功能。在jQuery中,`$.fn`实际上是`$.prototype`的一个...

    Jquery中$与$.fn的区别实例.zip

    当你希望自定义jQuery对象的行为或开发jQuery插件时,你会使用`$.fn`。 理解这些概念后,你就可以更有效地利用jQuery提供的强大功能,编写出更加优雅和高效的代码。通过实践和探索`Jquery中$与$.fn的区别实例`中的...

    学习jQuery中的Ajax——$.get()方法

    2. **data** - 可选,一个对象或字符串,作为发送到服务器的数据。如果是一个对象,它会被转换成查询字符串。 3. **success** - 可选,一个回调函数,当请求成功时被调用,返回的数据会作为参数传入。 4. **dataType...

    Ajax请求发送成功但不进success的解决方法

    $.ajax({ type : get, data : {'dbId':node.dbId,'viewId':node.id,'date':new Date()}, url : ${ctp}/ViewOperate/ShowViewSql, dataType : json, success : function(data){ console.log(data); l

    jQuery中数据缓存$.data的用法及源码完全解析.pdf

    在jQuery中,`.data`方法是用于在DOM元素或者JavaScript对象上存储和检索数据的关键功能。它提供了一种方便的方式来管理与元素相关的私有数据,避免了直接操作DOM的性能开销。这篇文章将详细解析jQuery中`.data`方法...

    jquery-1.3.2.min.js

    - **jQuery与其他库的兼容**:jQuery设计时考虑了与其他库共存,如使用$.noConflict()避免命名冲突。 - **jQuery源码阅读**:理解.min.js背后的源码逻辑,有助于深入学习JavaScript和前端开发。 总之,jQuery ...

    $.browser.msie 为空或不是对象问题的多种解决方法

    ‘$.browser.msie’ 为空或不是对象,这个是jQuery错误 出现这个错误,是因为升级了jQuery版本,从1.9以前升级到1.9以后,因为$.browser.msie在1.9以后的jQuery中不存在了,所以报错。 jQuery 1.9 移除了 $.browser ...

    jQuery中$.fn的用法示例介绍

    $.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效。 如扩展$.fn.abc(),即$.fn.abc()是对jquery扩展了一个abc方法,那么后面你的每一个jquery实例都可以引用这个方法了. 那么你可以这样子:...

    jquery.query.js

    4. 遍历与迭代:$.each()方法提供了遍历对象或数组的能力,可以方便地进行循环操作。 5. 条件判断:$.if()和$.switch()模拟了条件语句,使得JavaScript代码更接近自然语言,易于理解和维护。 6. 数组和对象操作:$...

    50个jquery

    6. **遍历与过滤(Traversing & Filtering)**:$.fn.next()、$.fn.prev()遍历元素,$.fn.first()、$.fn.last()选择首个或最后一个,$.fn.filter()和$.fn.not()进行过滤。 7. **属性操作(Attribute Handling)**:...

    Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    $.get(),$.post(),$.ajax(),$.getJSON() 一,$.get(url,[data],[callback]) 说明:url为请求地址,data为请求数据的列表,callback为请求成功后的回调函数,该函数接受两个参数,第一个为服务器返回的数据,第二个...

    Jquery $when done then的用法详解

    对于$.ajax请求来说,如果层级比较多,程序看起来会比较乱,而为了解决这种问题,才有了$when…done…fail…then的封装,它将$.ajax这嵌套结构转成了顺序平行的结果,向下面的$.ajax写法,看起来很乱 $.ajax({ url...

    jquery教程chm格式

    《jQuery教程CHM格式》是一本专为开发者设计的手册,它以压缩包的形式提供,包含了一系列关于jQuery库的详细教学内容。jQuery是一款强大的JavaScript库,它的出现极大地简化了JavaScript的DOM操作、事件处理、动画...

    jquery_api.mxp

    1. 插入元素:$.append(), $.prepend(), $.before(), $.after()等方法用于在已有元素后或前插入新元素,或者替换现有元素。 2. 删除元素:$.remove()可以移除匹配的元素,$.detach()则保留事件处理函数的同时移除...

Global site tag (gtag.js) - Google Analytics