Цикл элементов формы с классом Specefic - PullRequest
1 голос
/ 07 мая 2011

На самом деле я проверяю форму, которая имеет текст, выберите, раскрывающиеся и другие поля. У меня есть некоторые поля, которые являются обязательными, и я дал им обязательный класс (только текстовые поля). Теперь я хочу просмотреть все элементы формы и проверить, есть ли у этого класса требуемый класс, а затем добавить * после этого поля. Я использовал метод each (), но не могу заставить его работать так, как я хочу.

Мой код выглядит так:

function validate_form() {
    $("#mysubmit").each(function() {
        if($("form :text.required:text").val() == "" )
        {
            $("form :text.required:text").html("*");
            return false;
        }
        return true;
    });
}

где mysubmit - это идентификатор моей кнопки отправки.

Я хочу пройти элементы DOM один за другим. Может ли кто-нибудь помочь, как я могу проверить эту форму. Спасибо

Ответы [ 3 ]

1 голос
/ 07 мая 2011

Как вы сказали, вы хотите добавить в '*'.Вы пытались вставить его внутрь .

. Мы создадим диапазон с class="validation" Сделайте это так:

function validate_form() {
    var valid = true;
    $('form .required:text').each(function(){
       var $spanVal = $(this).next(); //Try to get the validation message (who has '*')
       if ($(this).val()!="" && $spanVal.is("span.validation")){ //If text has value
           $spanVal.remove(); //remove the asterisk
       }else if($(this).val()==""){ //If text is empty           
           if(!$spanVal.is("span.validation")){ //Create a validation message if it doesn't exist
              $('<span class="validation">*</span>').insertAfter(this);
           }
           valid = false;
       } 
    });
    return valid;
}

Надеюсь, это поможет.Приветствия.

0 голосов
/ 30 ноября 2016

вот так я решил свою проблему без

в операторе if удалите предупреждение и .append * :) думаю, что оно должно работать

https://stackoverflow.com/a/40891000/5185974

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

Вы можете использовать .after для добавления * после необходимого элемента, например:

$('.required').after('<span>*</span>');

Для перебора всех необходимых полей вы должны сделать следующее:

$(.required).each(function(){
    //do something with this
    //inside this function 'this' is in turn each of the selected elements
    alert($(this).val());
});

jQuery.each итерирует по всем элементам в выборе, к которому он применяется. В вашем случае $("#mysubmit") - это всего лишь один элемент (я предполагаю кнопку отправки). В этом нет необходимости.
Вот переписанная версия вашего кода:

function validate_form() {
    var valid = true;
    $('form .required').each(function(){
       if ($(this).val()==''){
         $(this).after('<span>*</span>');
         valid = false;
       }
    });
    return valid;
}

Примечания:

  • Нет необходимости в $("#mysubmit").each, так как логика внутри вашей функции не зависит от кнопки отправки
  • Возврат значения из функции .each, как вы пытались, не работает так, как вы ожидаете. Если вы вернете false из функции .each, она просто остановит итерацию.
  • $ ("form: text.required: text") будет соответствовать всем текстовым полям, имеющим класс .required, а не одному, как вы ожидаете.
...