Как JQuery проверить динамически сгенерированные скрытые текстовые области - PullRequest
1 голос
/ 01 апреля 2019

Я пытаюсь проверить несколько массивов текстовой области, которые добавляются динамически, а также скрыты. Итак, что я делаю, так это то, что я использую contenteditable div и всякий раз, когда пользователь вводит, он устанавливает значение textarea, которое скрыто. Поэтому я использую проверку для текстовой области

Я исследовал и узнал о функции .each и использовал ее. Но все равно это не сработало.

<div class="input-group">  
<textarea name="quiz[ques][0][ques]" style="display:none;" class="content-hidden">asd</textarea>            
<div contenteditable="true" id="question-edit-1" placeholder="Enter Question 1" name="quiz[question][]" class="content-visible valid" aria-invalid="false"></div>   
</div>

<div class="input-group">  
<textarea name="quiz[ques][1][ques]" style="display:none;" class="content-hidden">asd</textarea>            
<div contenteditable="true" id="question-edit-2" placeholder="Enter Question 2" name="quiz[question][]" class="content-visible valid" aria-invalid="false"></div>     
</div>

SCRIPT

$('form').submit(function (e) {
var ques = $('name^="quiz[ques]"');
ques.each(function() {
    $(this).rules("add", {
        required: true,
        messages: {
             required: "Please enter the questioon"
        }
    });
});
});

1 Ответ

0 голосов
/ 01 апреля 2019

Ваш код ...

$('form').submit(function (e) {
    var ques = $('name^="quiz[ques]"');
    ques.each(function() {
        $(this).rules("add", {
            ....
        });
    });
});

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

Динамически создать новое поле (поля) -> затем сразу добавить правило (ы)


Во-вторых, ваш селектор полностью сломан . Вам не хватает внешних скобок. Правильный формат для селектора «атрибут начинается с»: $('[attribute="value"]')

Итак, атрибут name начинается с quiz[ques] будет выглядеть так ...

$('[name^="quiz[ques]"]')

Если вам нужно быть более конкретным с селектором, вы можете добавить элемент textarea ...

$('textarea[name^="quiz[ques]"]')

Наконец, по умолчанию все скрытые поля игнорируются (не проверяются). Неясно, зачем вам нужно проверять textarea элементы, если они остаются скрытыми, потому что пользователь никогда не сможет с ними взаимодействовать Вы можете добавлять / удалять правила из скрытых полей, и они будут автоматически проверяться при отображении и не проверяться при скрытии.

Если вам нужно проверить какие-либо поля, которые остаются скрытыми, вам нужно переопределить стандартные настройки ignore. [] означает «ничего». Таким образом, ignore: [] означает, что ничего не игнорировать (подтвердить все).

$('#myform').validate({
    ignore: [], // ignore nothing - validate everything
    // other settings....
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...