2013-08-27 4 views
0

У меня есть форма, в которой есть элементы без идентификатора, потому что одна и та же форма создается несколько раз с использованием цикла while. Я пытаюсь проверить его, но не могу думать, как получить значения элементов, если нет идентификаторов для их получения. Я искал в Интернете, чтобы попробовать и имя элемента, но потому, что имя также повторяется каждый раз, когда создается форма, которая тоже не работает.Подтвердить форму без идентификатора

Есть ли простой способ проверить этот тип формы?

+0

Использование JQuery проверки Он работает по атрибутам имени Кроме того, вы можете обернуть... каждая другая форма внутри parate div с уникальным идентификатором и областью действия валидационного вызова типа '$ ('# formId', '#divId')' – achakravarty

+0

Какая идентифицирующая информация у вас есть? У форм есть идентификатор? Или вы просто проверяете n-ю форму? –

+1

Не записывайте JS-код, который проверяет отдельные поля, если вы _really_ не можете ему помочь: вместо этого добавьте какие-то атрибуты или классы в поля, чтобы описать, какая проверка требуется, а затем напишите более общий JS, который просто прокручивает все поля указанной формы. – nnnnnn

ответ

0

Поля форм не должны действительно подтверждаться идентификацией (то есть уникальной), они должны проверяться по типу (достигаются с помощью классов или атрибутов имени).

Например, поле электронной почты может иметь класс .validate-email. В JQuery вы перебирать все поля электронной почты с помощью .each():

$('.validate-email').each(function() { 
    $field = $(this); 
    // do your validation here... 
}); 

Или вы можете использовать функции действия, такие, как .keyup():

$('.validate-email').keyup(function() { 
    $field = $(this); 
    // do your validation here... 
}); 

Edit для решения комментариев:

что у вас есть:

<form id="student_form"> 
    <!-- some fields... --> 
    <div> 
    <select class="grade"><!-- markup... --></select> 
    <select class="reason_select"><!-- markup... --></select> 
    <!-- as many as you want --> 
    <select class="reason_select"><!-- markup... --></select> 
    </div> 
    <-- more fields... --> 
</form> 

Оставить заявку, возможно, вы coul d try:

$("form#student_form").submit(function(form_event) { 
    var $grade = $(this).find(".grade");  
    var valid = true; 
    if ($grade.val() != "1") { 
     $grade.siblings(".reason_select").each(function() { 
      if ($(this).val() == "") // or whatever is appropriate 
       valid = false; 
     }) 
    } 
    valid || form_event.preventDefault(); 
}); 
+0

Спасибо за это, но я не уверен, как это сработает. У меня есть выбор под названием grade и еще 4 выбора с классом под названием «reason_select». Если класс не равен 1, то, по крайней мере, один из аргументов reason_selects должен иметь значение – tatty27

+0

. Таким образом, эта проверка только на форме submit? – azz

+0

Похоже, что вы независимо прибыли почти таким же решением, как и я. Обратите внимание, что вам нужно объявить аргумент 'e' в обработчике отправки. – nnnnnn

0

При создании элементов управления в цикле вы можете создавать уникальные значения name или ID для элементов управления.

txt1 
txt2 
txt3 
txt4 
txt5 

Так что, если это PHP, вы можете сделать "txt<?php echo count; ?>" или что-то подобное.

0

Я согласен с ответами выше. Причина, по которой вы не можете подтвердить эту форму, состоит в том, что у вас есть те же/или похожие селекторы для ваших форм.

Дайте формы одинаковые идентификаторы (это может быть быть как <form id="form1"> или несколько подобное. После того, как формы, которые не соответствуют с другими формами, вы должны делать то же самое с полями ввода внутри. Тем не менее, здесь вы можете использовать классы вместо этого, так как вы можете использовать форму ID для выбора поля ввода с JQuery Validate (пример: $('#form1 .txtUserName').validate(/* Your functions and other specifications goes here */);)..

Надежда это помогает :)

/J.

0

Если вам нужно иметь дело с массивом аналогичных элементов, вы можете использовать подход ul > li (конечно, нужен идентификатор).

<ul id="elementList"> 
    <li><!-- element1 --></li> 
    <li><!-- element2 --></li> 
    <li><!-- element3 --></li> 
</ul> 

Затем с JQuery вы можете получить доступ к этому что-то вроде этого:

$('#elementList').each(function(index){ 
    validateElement(index); 
}); 

Надеется, что это помогает :)

0

«Я быть_наст выбор под название класс и еще 4 выбирает с классом reason_select.Если класс не 1, то по крайней мере один из reason_selects должны иметь значение.»

Предполагая, что все ваши формы имеет эти пять отдельных элементов, и что вы хотите проверить только те, для каких индивидуальной формы получает представлены , вы можете сделать что-то вроде этого:

$("form").submit(function(e) { 
    var $form = $(this), 
     reasonHasVal = false; 
    if ($form.find('select[name="grade"]').val() != "1") { 
     $form.find("select.reason_select").each(function() { 
      if ($(this).val() != "") { 
       reasonHasVal = true; 
       return false; 
      } 
     }); 
     if (!reasonHasVal) { 
      e.preventDefault(); 
      alert("Please select a reason."); 
     } 
    } 
}); 

ключ с помощью .find() method только иметь дело с элементами формы в вопросе

Смежные вопросы