私は、複数のフィールドの検証を一般的な方法で機能させることに取り組んできました。私のフォームには、2 つのテキストフィールドを持つ親スパンがあります。一方または両方のテキストフィールドが検証に失敗した場合、スパンは errorclass で強調表示される必要があります。私の場合、2 つのテキストフィールドの周りに赤いボックスが表示され、両方のフィールドが有効な場合、スパンは強調表示されません。 . ただし、実際の動作は、最初のテキスト ボックスに有効な値が指定されている場合、2 番目のフィールドの必須/正規表現の検証がまだ渡されていなくても、jquery のハイライト/ハイライト解除関数が 2 つのフィールドの errorClass/redbox を削除することです。カスタム メソッドを作成し、両方の texbox に追加の検証ルールを追加し、tesbox をグループ化しましたが、どれも機能していません。実際には jquery の初心者であり、現在の場所から先に進むことができませんでした。
サンプルコードはこちら
setUpValidations : 関数 () {
$.validator.addMethod(
'regex', function(value, element, param) {
var regex = new RegExp(param);
return regex.test(value);
}, 'Regex failed'
);
$.validator.addMethod(
'validateGroupFields', function(value, element) {
var spanElement = $(element).closest('span');
var spanChildren = listChildren(spanElement);
var result = true;
spanChildren.each( function(index, value) {
//alert("index" + index + "value" + value);
if((this).valid() == true)
{
$(this).siblings('div.errorbuble1').hide();
}else {
result = false;
}
});
return result;
}, 'Group validation failed'
);
function listChildren(element) {
var children = $(element).find(':input');
return children;
};
$.validator.setDefaults({
highlight: function(element) {
$(element).closest('span').attr('class','error');
},
unhighlight: function(element) {
$(element).closest('span').attr('class','');
},
onfocusout: function(element, event) {
if ( !this.checkable(element) || !this.optional(element)) {
this.element(element);
$(element).siblings('div.errorbuble1').hide();
}
},
onfocusin: function(element) {
if( (element.name in this.submitted) && !$(element).valid()){
$(element).siblings('div.errorbuble1').show();
}
},
onclick: function(element, event) {
// click on selects, radiobuttons and checkboxes
if(element.type === 'radio' || element.type === 'checkbox'){
this.element(element);
}
else if( (element.name in this.submitted)){ //select
this.element(element);
}
},
});
},
onValidate : function () {
$('#form11').validate({
errorClass: 'newError',
submithandler: function(form11){
(form11).submit();
},
invalidHandler: function(form, validator) {
submitted = true;
},
rules : {
'errorIndicator2:textField3':{
required:true,
regex : {
param : /^[0-9]+$/
},
validateGroupFields: true
},
'errorIndicator2:textField4':{
required:true,
regex : {
param : /^[a-z]+$/
},
validateGroupFields: true
},
},
groups: {
nameGroup: "errorIndicator2:textField3
errorIndicator2:textField4"
},
showErrors: function(errorMap, errorList) {
this.defaultShowErrors();
if (submitted) {
$('div.errorbuble1').hide();
submitted = false;
}
},
errorElement: "div",
wrapper: "div", // a wrapper around the error message
errorPlacement: function(error, element) {
offset = element.offset();
error.addClass('errorbuble1'); // add a class to the wrapper
error.css('position', 'absolute');
error.css('left', offset.left + (element.outerWidth()) + 5);
error.css('top', offset.top + (element.outerHeight())/3);
error.insertAfter(element);
},
var submitted = false;
$(document).ready(function(){
JavaScriptValidator.setUpValidations();
JavaScriptValidator.onValidate();
$("[type=submit]").on({
click: function(event) {
JavaScriptValidator.onValidate();
}
});
});
<h3>Error box around two fields:</h3>
<span wicket:id="errorIndicator2">
<table>
<tbody><tr>
<td>Number:</td><td><input wicket:id="textField3" name="errorIndicator2:textField3" type="text"></td>
</tr>
<tr>
<td>Alpha</td><td><input wicket:id="textField4" name="errorIndicator2:textField4" type="text"></td>
</tr>
</tbody></table>
<!-- error popup div gets added here -->