我在我的项目中使用了 validatious-custom-0.9.1.js 框架,我正在尝试验证单选按钮的必填字段。但它没有验证 IE8 中的单选按钮。我在控制台中收到以下错误
Message: 'tagName' is null or not an object
Line: 7
Char: 9921
Code: 0
URI: http://validatious.org/design/js/validatious.0.9.1.min.js?1256063644
使用的 HTML 代码。
<div>
<label for="_button_880">Radio List
<div>
<p>some text</p>
</div>
</label>
<div>
<ul>
<li>
<div>
<div>
<input type="radio" name="radio1" id="radio1" value="Radio1" class="required" title="Required."/>
<label for="radio1">Radio1</label>
</div>
</div>
</div>
</div>
失败的 JS - 前 2 个是框架文件中给出的示例。所以你会知道它是如何实现的
/* 单选按钮字段被假定为一个列表 - 有序或无序 - 前面有一些元素作为标签。这可以是任何元素。如果它不在列表中(即元素没有“li”父元素),则假定标签是第一个输入元素之前的元素。
示例1(列表方法):
<h2>Favourite food:</h2>
<ul>
<li>
<input type="radio" name="food" value="hamburger" id="food_hamburger" />
<label for="food_hamburger">Haburger</label>
</li>
<li>
<input type="radio" name="food" value="pizza" id="food_pizza" />
<label for="food_pizza">Pizza</label>
</li>
</ul>
getLabel() 在这种情况下将返回 h2 元素。
示例 2(无列表)。
<label class="groupLabel">Favourite food:</label>
<input type="radio" name="food" value="hamburger" id="food_hamburger" />
<label for="food_hamburger">Hamburger</label>
<input type="radio" name="food" value="pizza" id="food_pizza" />
<label for="food_pizza">Pizza</label>
getLabel() 在这种情况下将返回第一个标签元素
*/
实际代码
getLabel: function() {
var parent = this.__elements[0].parentNode;
//alert(parent1.nodeName); --- Gives 'nodeName' is null or not an object IN Ie8
if (parent1.tagName.toLowerCase() === 'li') { ---Gives 'tagName' is null or not an object
return v2.$(parent1.parentNode).previous();
}
var element = v2.$(this.__elements[0]).previous();
return element || this.base();
}
js文件中的必填字段验证
v.reg('required', function(field, value, params) {
return !v2.empty(value) && !(typeof value.length !== 'undefined' && value.length == 0);
}, null, null, 'not-empty', false);
它在 Firefox、IE7 和 IE9 中运行良好。但在 Ie8 中,我收到消息 tagName 为 null 或不是对象。
有人可以帮助我吗?如果解决了这个问题,那么这个框架将非常有用,可以避免验证过程中的所有困难。
提前致谢..