#php #codeigniter #jquery-validate
#php #codeigniter #jquery-проверка
Вопрос:
Я пытаюсь проверить несколько массивов текстовой области, которые добавляются динамически и также скрыты. Итак, что я делаю в точности, я использую contenteditable div и всякий раз, когда пользователь вводит, он устанавливает значение текстовой области, которая скрыта. Итак, я использую проверку для текстовой области
Я исследовал, узнал о .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>
СКРИПТ
$('form').submit(function (e) {
var ques = $('name^="quiz[ques]"');
ques.each(function() {
$(this).rules("add", {
required: true,
messages: {
required: "Please enter the questioon"
}
});
});
});
Комментарии:
1. убедитесь, что вы добавляете атрибут required , установленный как true при добавлении любой текстовой области и установленный как false при удалении
2. Но для проверки jquery мне не нужно этого делать. Правильно?
3. Я пытался, но все равно это не сработало
4. попробуйте это
$('input[name="myname"]').rules('add', {...});
5. @DanishAli, на самом деле это текстовая область, не вводимая
Ответ №1:
Ваш код…
$('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....
});
Комментарии:
1. Спасибо, я получил свое решение идеальным способом