我已经设法让jQuery验证插件与RequireJs一起使用。我现在正在尝试设置jquery验证默认参数,以便它不验证包含在data-prefix属性的标记中的字段(这在Page1.js文件中完成)。但是,当您单击“提交”按钮时,它会尝试验证这两个字段。
这是代码(与更复杂的演示相关联的原始问题):
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<meta charset="utf-8" />
<script src="http://ajax.cdnjs.com/ajax/libs/require.js/2.1.5/require.js"></script>
<script>
require.config({
paths: {
'jquery': 'http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.8.3',
'jquery.validate': 'http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate',
'jquery.validate.unobtrusive': 'http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive'
},
shim: {
'jquery.validate': ['jquery'],
'jquery.validate.unobtrusive': ['jquery', 'jquery.validate']
}
});
require(['jquery', 'jquery.validate', 'jquery.validate.unobtrusive'], function($) {
$.validator.setDefaults({
ignore: '[data-js-val-prefix] *'
});
});
</script>
</head>
<body>
<form>
<div class="validation-summary-valid" data-valmsg-summary="true"><span>Please correct the errors and try again.</span>
<ul><li style="display:none"></li></ul>
</div>
<fieldset>
<legend>Include</legend>
<input name="Include" type="text" required />
</fieldset>
<fieldset data-js-val-prefix="Exclude">
<legend>Exclude</legend>
<input name="Exclude" type="text" required />
</fieldset>
<p><button type="submit">Submit</button></p>
</form>
</body>
</html>
我没有使用库的缩小版本,因为它可能有助于调试。
我很感激帮助。感谢
修改
如果您将脚本块更改为以下任一项,则可以正常工作。
没有RequireJs:
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.8.3.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.js"></script>
<script>
$.validator.setDefaults({
ignore: '[data-js-val-prefix] *'
});
</script>
没有不引人注目的JavaScript:
<script>
require.config({
paths: {
'jquery': 'http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.8.3',
'jquery.validate': 'http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate'
},
shim: {
'jquery.validate': ['jquery']
}
});
require(['jquery', 'jquery.validate'], function($) {
$.validator.setDefaults({
ignore: '[data-js-val-prefix] *'
});
$(function() {
$('form').validate();
});
});
</script>
这告诉我,不显眼的验证库和RequireJs存在问题。我确定我做的是一些微不足道的错误。
答案 0 :(得分:7)
我在@Sparky的帮助下回答了我自己的问题。问题发生是因为jquery.validate.unobtrusive文件连接了validate方法,如果你在回调函数中说$ .validator.setDefaults,它就已经连接了验证,它将被忽略。如果将require脚本块更改为以下内容:
require(['jquery', 'jquery.validate'], function($) {
$.validator.setDefaults({
ignore: '[data-js-val-prefix] *'
});
require(['jquery.validate.unobtrusive']);
});
一切都很花花公子。我希望这会有所帮助。