问题产生原因
最近在项目中使用jquery easyui做页面。其中有个优化问题,我是将原本由jsp通过jstl标签生成的页面改成js通过dom去延迟生成了。
但是js生成的代码在执行过程中报错“Cannot read poperty 'options' of undefined”。
本来的jstl生成的页面不报错,但是js操作生成的代码报错,而且是其中部分页面报错。
问题发现
最终我发现报错的页面都是带有时间的页面,也就是说我使用如下代码生成的。
var parentDiv = $("#parentDiv");
var timeInput = document.createElement("input");
timeInput.className = "easyui-datebox";//easyui日期插件,就是这个地方导致的报错
timeInput.id = "aaa";
parentDiv.appendChild(timeInput);
问题原因就是js生成的代码要用到easyui的class样式,这时候就会报错。
因为jquery函数执行了类似如下代码:
var dateboxInput = $.data(input, "datebox");
var opts = dateboxInput.options;
jquery认为这是个datebox类型的数据,但是去解析却得到了undefined。
解决方法
解决方案就是在你加了class的标签的父级标签,加这么一行代码:$.parser.parse(parentDiv);
,加了这一句以后eayui就会重新加载一遍这一块代码,样式和功能都会加上的。
记住一定要在js生成的添加class标签的元素的父级元素上面加$.parser.parse(parentDiv),否则还是没用。