Я использую «плагин проверки jQuery 1.7».
Проблема, почему несколько элементов "$ (: input)", имеющих одно и то же имя, не проверены
- это метод $ .validator.element:
elements: function() {
var validator = this,
rulesCache = {};
// select all valid inputs inside the form (no submit or reset buttons)
// workaround $Query([]).add until http://dev.jquery.com/ticket/2114 is solved
return $([]).add(this.currentForm.elements)
.filter(":input")
.not(":submit, :reset, :image, [disabled]")
.not( this.settings.ignore )
.filter(function() {
!this.name && validator.settings.debug && window.console && console.error( "%o has no name assigned", this);
// select only the first element for each name, and only those with rules specified
if ( this.name in rulesCache || !validator.objectLength($(this).rules()) )
return false;
rulesCache[this.name] = true;
return true;
});
},
Состояние
if (this.name в rulesCache || .....
оценивает для второго и следующих элементов, имеющих одинаковое имя, true ....
Решение будет иметь условие:
(this.id || this.name) в rulesCache
Извините, JS puritans, что (this.id || this.name) не на 100% ...
Конечно,
rulesCache [this.name] = true;
Строка
также должна быть соответствующим образом изменена.
Таким образом, метод $ .validator.prototype.elements будет выглядеть так:
$(function () {
if ($.validator) {
//fix: when several input elements shares the same name, but has different id-ies....
$.validator.prototype.elements = function () {
var validator = this,
rulesCache = {};
// select all valid inputs inside the form (no submit or reset buttons)
// workaround $Query([]).add until http://dev.jquery.com/ticket/2114 is solved
return $([]).add(this.currentForm.elements)
.filter(":input")
.not(":submit, :reset, :image, [disabled]")
.not(this.settings.ignore)
.filter(function () {
var elementIdentification = this.id || this.name;
!elementIdentification && validator.settings.debug && window.console && console.error("%o has no id nor name assigned", this);
// select only the first element for each name, and only those with rules specified
if (elementIdentification in rulesCache || !validator.objectLength($(this).rules()))
return false;
rulesCache[elementIdentification] = true;
return true;
});
};
}
* * 1 028}); * * тысяча двадцать девять