Проверить несколько полей с одним и тем же именем - PullRequest
0 голосов
/ 17 мая 2011

Вот часть моего HTML:

<div class="editor-field">
    <input id="ImmobilizationLength_1" name="ImmobilizationLength" type="text" value="">
</div>
....
*HTML Code*
....
<div class="editor-field">
    <input id="ImmobilizationLength_2" name="ImmobilizationLength" type="text" value="">
</div>

Когда я хочу проверить эти поля с помощью jQuery, я добавляю к правилам:

ImmobilizationLength: { required: true, digits: true }

Когда форма отправлена, проверяется только первое поле ImmobilizationLength.

Я прочитал на stackoverflow другой вопрос о том, который рекомендует использовать:

$('[name="ImmobilizationLength"]').each(function(){
    $(this).rules("add", { required: true, digits: true } );   
});

Но, когда я это делаю, я получаю эту ошибку:

TypeError: Невозможно прочитать свойство 'nodeName' из неопределенного

Как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 17 мая 2011

Согласно W3Schools, ID должен быть уникальным:

"Атрибут id указывает уникальный идентификатор для элемента HTML. Идентификатор должен быть уникальным в документе HTML."

http://www.w3schools.com/tags/att_standard_id.asp

Ваш Javascript не будет работать должным образом, поскольку разметка недействительна. После исправления разметки (путем создания уникальных идентификаторов и, при необходимости, добавления класса) вы легко сможете проверить свои уникальные поля.

Обратите внимание, что в отличие от идентификаторов, занятия могут повторяться. Имена не должны повторяться, потому что значения каждого поля будут перезаписывать друг друга, если форма отправлена.

РЕДАКТИРОВАТЬ:

Повторяющиеся имена по-прежнему являются проблемой. Если вы хотите использовать each (), вам нужно будет использовать идентификатор, который можно дублировать, например, class.

$('[name="ImmobilizationLength"]').each(function(){ 
});

станет

$('.test').each(function(){
});
0 голосов
/ 31 января 2012

Вот как я решил похожую проблему, которая у меня была. Хотя вместо проверки я динамически устанавливал значения. Однако может быть применена та же основная логика:

function validateFieldValues( fields )
{
    if ( 'length' in fields ) 
    {
        // We got a collection of form fields
        for ( var x = 0; x < fields.length; x++ ) {
            doValidation( fields[x].value );
        }
    }
    else
    {
        // We got a single form field
        doValidation( fields.value );
    }
}

function submitHandler( oForm )
{
    // Get the element collection of <input> elements with the same name
    var someNameElmts = oForm.elements.someName;

    // *should* always exist.  But just in case...
    if ( someNameElmts ) {
        validateFieldValues( someNameElmts );
    } else {
        // deal with it
    }
}

В HTML:

<form 
method="post" 
name="someForm" 
id="someFormID" 
action="/some/path" 
onsubmit="submitHandler(this);">

Надеюсь, это поможет!

0 голосов
/ 17 мая 2011

нельзя иметь элементы с одинаковыми селекторами идентификаторов, работать не будет Кроме того, если они имеют одинаковое имя, когда вы публикуете данные не будут правильными. если вы не используете namearray

как

 name="ImmobilizationLength[]"

например

<div class="editor-field">
    <input id="input_1"  name="input_1" class="test" type="text" value="">
</div>

На основании комментариев после изменения идентификатора, который вы можете использовать, начинается с селектора

 $('[id^="input_"]').each(...
....
*HTML Code*
....
<div class="editor-field">
       <input id="input_2"  name="input_2" class="test" type="text" value="">
</div>

Я бы дал им класс и правило, основанное на имени класса

$.validator.addClassRules({
       test: {
           digits: true,
           required: true
       }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...