Javascript 如何使jQuery有效函数在IE上可靠地工作?
我对jQuery有效函数有一个问题。当启用IE时,它不起作用,有效值总是返回true。我使用了以下代码: 以下是图表:Javascript 如何使jQuery有效函数在IE上可靠地工作?,javascript,jquery,internet-explorer,validation,Javascript,Jquery,Internet Explorer,Validation,我对jQuery有效函数有一个问题。当启用IE时,它不起作用,有效值总是返回true。我使用了以下代码: 以下是图表: Chrome IE jquery-1.6.1 works not working jquery-1.4.4 works works 1.6在IE上也不起作用。但是,1.4.4 jQuery在IE上有效 下面是JSFIDLE友好测试(将其作为本地html进行测试): //来
Chrome IE
jquery-1.6.1 works not working
jquery-1.4.4 works works
1.6在IE上也不起作用。但是,1.4.4 jQuery在IE上有效
下面是JSFIDLE友好测试(将其作为本地html进行测试):
//来源于https://stackoverflow.com/questions/5965470/client-side-validation-with-dynamically-added-field
//我认为这没有问题
(函数($){
$.validator.unobtrusive.parseDynamicContent=函数(选择器){
//使用普通的unobstructive.parse方法
$.validator.unobtrusive.parse(选择器);
//获取相关表格
var form=$(选择器).first()最近('form');
//获取非结构化验证器和jquery验证器的集合
//并将两者进行比较
var unobtrusiveValidation=form.data(“unobtrusiveValidation”);
var validator=form.validate();
$.each(unobtrusiveValidation.options.rules,函数(elname,elrules){
if(validator.settings.rules[elname]==未定义){
var args={};
$.extend(args、elrules);
args.messages=unobtrusiveValidation.options.messages[elname];
$('[name='+elname+']')。规则(“添加”,args);
}否则{
$.each(规则、函数(规则名称、数据){
if(validator.settings.rules[elname][rulename]==未定义){
var args={};
args[rulename]=数据;
args.messages=unobtrusiveValidation.options.messages[elname][rulename];
$('[name='+elname+']')。规则(“添加”,args);
}
});
}
});
}
})($);
//…来源于他人
//我的代码从这里开始。。。
$(函数(){
var html=“”;
$(“表格”)。附加(html);
变量范围=$(“#XXX”);
$.validator.unobtrusive.parseDynamicContent(范围);
$(“#保存”)。单击(函数(e){
e、 预防默认值();
警报(scope.valid());
});
});
//…我的代码到此结束
更新
我在JSFIDLE上尝试了我的代码,它有副作用,jQuery 1.6的valid正在IE上运行。不要在JSFIDLE上测试此代码。在本地html上测试此代码此问题已解决。试试1.8.1版
嗨,我也遇到了同样的问题,我已将两个脚本文件更新为最新版本,我这边的一切都很好。请访问jquery.com,查看最新的jquery代码文件。您使用了什么版本的IE?我最近使用了您在那里找到的动态解析函数,我似乎无法复制该问题,似乎所有这些都在1.6.1和IE上工作。也许这与添加带有验证的自定义输入的方式有关。你能在JSFIDLE上安装并运行它吗?这需要很多代码。有些甚至不是HTML/JS。如果你尽量减少代码量,你就更有可能得到答案。好的,今天stackoverflow第二次让我免于发疯,我将删除ASP.NET MVC代码!干杯完美的我也有同样的问题,在IE 8中调用valid不起作用,但在FireFox中却起作用。下载了最新的JQUery验证1.8.1,我的问题就消失了。谢谢你,贝吉
<!--
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js" type="text/javascript"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.8/jquery.validate.min.js" type="text/javascript"></script>
<script src="http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>
<form id="XXX">
<input type="submit" id="Save" value="Save">
</form>
<script type="text/javascript">
// sourced from https://stackoverflow.com/questions/5965470/client-side-validation-with-dynamically-added-field
// which I do think don't have a bug
(function ($) {
$.validator.unobtrusive.parseDynamicContent = function (selector) {
//use the normal unobstrusive.parse method
$.validator.unobtrusive.parse(selector);
//get the relevant form
var form = $(selector).first().closest('form');
//get the collections of unobstrusive validators, and jquery validators
//and compare the two
var unobtrusiveValidation = form.data('unobtrusiveValidation');
var validator = form.validate();
$.each(unobtrusiveValidation.options.rules, function (elname, elrules) {
if (validator.settings.rules[elname] == undefined) {
var args = {};
$.extend(args, elrules);
args.messages = unobtrusiveValidation.options.messages[elname];
$('[name=' + elname + ']').rules("add", args);
} else {
$.each(elrules, function (rulename, data) {
if (validator.settings.rules[elname][rulename] == undefined) {
var args = {};
args[rulename] = data;
args.messages = unobtrusiveValidation.options.messages[elname][rulename];
$('[name=' + elname + ']').rules("add", args);
}
});
}
});
}
})($);
// ...sourced from others
// my code starts here...
$(function () {
var html = "<input data-val='true' " +
"data-val-required='This field is required' " + "name='inputFieldName' id='inputFieldId' type='text'/>";
$("form").append(html);
var scope = $('#XXX');
$.validator.unobtrusive.parseDynamicContent(scope);
$('#Save').click(function (e) {
e.preventDefault();
alert(scope.valid());
});
});
// ...my code ends here
</script>