【发布时间】:2017-11-18 04:51:27
【问题描述】:
我正在尝试为所需的控件显示星号。代码在所需的类中运行良好,但现在我有两个字段,公司和名称。根据其他元素的值,只需要其中一个。是否可以在不验证控件或表单的情况下检查是否需要输入?
示例 html 结构:
<div class="form-group">
<label class="control-label" for="CompanyName">Company Name</label>
<div>
<input type="text" id="CompanyName" name="CompanyName" class="form-control required">
</div>
</div>
JS:
validationOptions: {
ignore: ":disabled,:hidden",
rules: {
CompanyName: {
required: function () {
return ($("#ContactName").val().length === 0);
}
},
ContactName: {
required: function () {
return ($("#CompanyName").val().length === 0);
}
}
},
onkeyup: function (element) {
const $parent = $(element).parents(".form-group");
if ($(element).valid()) {
$parent.removeClass("invalid");
} else {
$parent.addClass("invalid");
}
},
onfocusout: function () {
if ($("form").valid()) {
$("form.error").removeClass("error");
$("form .invalid").removeClass("invalid");
}
},
errorPlacement: function (error, element) {
const $parent = $(element).parents(".form-group");
if ($(element).hasClass("error")) {
$parent.addClass("invalid");
} else {
$parent.removeClass("invalid");
}
},
invalidHandler: function (event, validator) {
$.each(validator.successList, function (index, item) {
$(item).parents(".form-group").removeClass("invalid");
});
const errors = validator.numberOfInvalids();
if (errors) {
$.each(validator.errorList, function (index, item) {
$(item.element).parents(".form-group").addClass("invalid");
});
}
}
}
当然,我可以将我的代码放在上面所需的回调中,但这不是一个通用的解决方案。
我希望能够多次调用以下函数来根据字段的所需状态更新(引导)表单上的星号。
appendFormControlAsterisk: function ($panel) {
//removeFormControlAsterisk($panel);
let $controls = $(".form-control.required");
$controls.each(function () {
const $label = $(this).parents(".form-group").find(">.control-label");
$label.html($label.html() + " <span class='text-danger'>*</span>");
});
},
试图完成类似的事情:
appendFormControlAsterisk: function ($panel) {
//removeFormControlAsterisk($panel);
let $controls = $(".form-control");
$controls.each(function () {
if ($(this).isRequired()) {
const $label = $(this).parents(".form-group").find(">.control-label");
$label.html($label.html() + " <span class='text-danger'>*</span>");
}
});
},
【问题讨论】: