У меня много форм для
У меня этот HTML-код
<form method="post" id="form_commento-[i]" class="form_fancybox_commenti">
<div class="form-section">
<span style="position: relative">
<input type="text" id="commento_form_[i]_commento" name="commento_form_[i][commento]" required="required"/>
<button type="submit" class="submit-button" id="submit_form_commenti">Commenta</button>
</span>
</div>
</form>
Где [i] - индекс
в моем документе готов я
$(document).ready(function() {
jQuery.validator.addMethod("alphanumeric", function (value, element) {
return this.optional(element) || /^[a-zA-Z0-9\n\-'àèìòù: <_,. !?()]*$/.test(value);
}, "error");
$('.form_fancybox_commenti').each(function(index, numero_form) {
var theRules = {};
theRules[
'commento_form_['+index+'][commento]'] = {alphanumeric: true};
$(this).validate({
rules: theRules,
submitHandler: function(form) {
save(form);
}
});
});
но мои пользовательские правила не работают.
В любом случае, чтобы решить эту проблему?
Если name
commento_form_[i][commento]
, то вам не хватает набора скобок здесь...
'commento_form_'+index+'[commento]'
=>
'commento_form_['+index+'][commento]'
Однако на данный момент вы еще не определили index
поэтому этот метод завершился с ошибкой консоли JavaScript.
Существует очень простая альтернатива этому фрагменту JavaScript. Добавьте class="alphanumeric"
к вашим элементам <input>
, и ваш код будет уменьшен просто до этого:
$(document).ready(function () {
jQuery.validator.addMethod("alphanumeric", function (value, element) {
return this.optional(element) || /^[a-zA-Z0-9\n\-'àèìòù: <_,. !?()]*$/.test(value);
}, "error");
$('.form_fancybox_commenti').each(function (index, numero_form) {
$(this).validate({
submitHandler: function (form) {
save(form);
// alert('save form: ' + index); // for demo
return false; // blocks default form action
}
});
});
});
ДЕМО: http://jsfiddle.net/XTtTP/
Если вы предпочитаете использовать JavaScript для назначения своих правил, вы также можете использовать метод .rules('add')
в jQuery .each()
, как .each()
ниже, и индексация не требуется:
$('input[name^="commento_form_"]').each(function () {
$(this).rules('add', {
alphanumeric: true
});
});
ДЕМО: http://jsfiddle.net/T776Z/
BTW, в файле additional-methods.js
уже есть метод, называемый alphanumeric
. См.: http://jsfiddle.net/h45Da/
Это лучшее решение, которое я нашел и использую в своем проекте:
// Adding rule to each item in commento_form_i list
jQuery('[id^=commento_form_]').each(function(e) {
jQuery(this).rules('add', {
minlength: 2,
required: true
})
});