我有一个带有三个不同文本框的简单表单,可以在返回结果集之前输入搜索条件。在这三个字段中,如果另一个字段为空,我希望有条件地生成两个字段。
在附带的屏幕截图中,如果没有输入"标题"则无法提交搜索表单。或"表演者"领域。如果两个字段都有值,则可以。我想通过制作" Title"来实现这一目标。当表演者"表演者"是空的。但是我的代码不起作用。我在服务器端进行了必要的验证。我正在寻找客户端解决方案。
HTML源代码:
$(function() {
if ($.validator && $.validator.unobtrusive) {
$.validator.addMethod("requiredif", function (value, element, params) {
return !(value.length === 0 && $(params).val().length === 0);
});
$.validator.unobtrusive.adapters.add("requiredif", ["otherpropertyname"], function (options) {
options.rules["requiredif"] = "#" + options.params.otherpropertyname;
options.messages["requiredif"] = options.message;
});
}
$("#searchWork").click(function() {
if ($("#searchWorkForm").valid()) {
// Make an Ajax Call and get the search result
}
});
}
客户端验证码:
{{1}}
答案 0 :(得分:0)
首先需要将$.validator.addMethod()
和$.validator.unobtrusive.adapters.add()
函数移到$(function() { .. }
但根据您要验证的内容的说明,您的$.validator.addMethod()
方法中的代码应首先检查其他属性' (searchWorkPerformer
)有一个值,如果有,则返回true
。如果没有,则检查searchWorkTitle
是否有值。如果有,则返回true
,否则返回无效,返回false
。
// scripts for jquery, jquery.validate and jquery.validate.unobtrusive
<script>
$.validator.addMethod("requiredif", function (value, element, params) {
if ($(params).val().length === 0) {
return true;
} elseif (value.length === 0) {
return false;
}
return true;
});
$.validator.unobtrusive.adapters.add("requiredif", ["otherpropertyname"], function (options) {
options.rules["requiredif"] = "#" + options.params.otherpropertyname;
options.messages["requiredif"] = options.message;
});
$(function() {
$("#searchWork").click(function() {
if ($("#searchWorkForm").valid()) {
// Make an Ajax Call and get the search result
}
});
}
</script>
旁注:requiredif
并未真正描述您的验证 - 或许requiredifempty
更合适,因为如果其他属性为空,您只需要一个值。