Блог о программировании на PHP, Yii2, 1C-Bitrix

Валидация массива через jquery.validate.js

Столкнулся с задачей валидации массива данных в форме.

<form name="signupForm" method="get" action="">
<input id="1" name="cat[]" value="">
<input id="2" name="cat[]" value="">
<input class="submit" type="submit" value="Submit">
</form>

Сначала думал, что он не хочет валидировать значения при динамическом добавлении полей, но потом оказалось все гораздо проще, хотя как сказать.
Стандартно jquery.validate.js не поддерживает валидацию массивов, он валидирует только первый элемент у исходных, поэтому придется переписать этот js.
Открываем эту js-ку и переписываем функцию:

checkForm: function() {
	this.prepareForm();
	for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
		if (this.findByName( elements[i].name ).length != undefined && this.findByName( elements[i].name ).length > 1) {
			for (var cnt = 0; cnt < this.findByName( elements[i].name ).length; cnt++) {
				this.check( this.findByName( elements[i].name )[cnt] );
			}
		}else{
			this.check( elements[i] );
		}
	}
	return this.valid();
},

Важное замечание, для корректной валидации, необходимо, чтобы каждый инпут был уникален, т.е. для примера уникальный id для каждого инпута.