javascript — проверка динамических переключателей jQuery

Проблема: Я не могу проверить динамически созданные переключатели.

Вопрос: Как я могу использовать JQuery для проверки переключателей?

Можно ли настроить jQuery для проверки динамически создаваемых переключателей?

Какие-либо предложения?

HTML и PHP из моей формы

<label class="radio">
<input type="radio" name='radnummer_varde[<?php echo $kk['radnummer'];?>]' value='1' <?php if (($hamta_formaga['radnummer_varde'] == '1')) echo 'checked="checked" '; ?>>
<i class="rounded-x"></i>Prövas
</label>

<label class="radio">
<input type="radio" name='radnummer_varde[<?php echo $kk['radnummer'];?>]' value='0' <?php if (($hamta_formaga['radnummer_varde'] == '0')) echo 'checked="checked" '; ?>>
<i class="rounded-x"></i>Prövas ej
</label>

echo $kk['radnummer'] является числовым

Проверка через JS

var AbbRedigeraForm = function () {

return {

initAbbRedigeraForm: function () {
// Validation
$("#redigera_abb").validate({
// Regler för validation
rules:
{
'radnummer_varde[]':
{
required: true
},
aktiv:
{
required: true
},
arbetsomrade:
{
required: true,
minlength: 8,
maxlength: 30
},
syfte:
{
required: true
},
overgripande_mal:
{
required: true
},
undervisning:
{
required: true
},
redovisningsform:
{
required: true
},

},

// Messages for form validation
messages:
{
radnummer_varde:
{
required: 'Du måste ange detta.'
},
arbetsomrade:
{
required: 'Skriv en rubrik för arbetsområdet.'
},
syfte:
{
required: 'Skriv ett syfte.'
},
overgripande_mal:
{
required: 'Du måste ange övergripande mål.'
},
undervisning:
{
required: 'Du måste skriva något om undervisningen.'
},
redovisningsform:
{
required: 'Du måste skriva något om redovisning.'
},
},
// Do not change code below
errorPlacement: function(error, element)
{
error.insertAfter(element.parent());
}
});
}

};

}();

РЕДАКТИРОВАТЬ 2015-03-27:

Вариант 2

<label class="radio">
<input type="radio" name='radnummer_varde[<?php echo $kk['radnummer'];?>]' value='1' <?php if (($hamta_formaga['radnummer_varde'] == '1')) echo 'checked="checked" '; ?>>
<i class="rounded-x"></i>Prövas
</label>

<label class="radio">
<input type="radio" name='radnummer_varde[<?php echo $kk['radnummer'];?>]' value='0' <?php if (($hamta_formaga['radnummer_varde'] == '0')) echo 'checked="checked" '; ?>>
<i class="rounded-x"></i>Prövas ej
</label>

<script type="text/javascript">
$(document).ready(function () {
$('#redigera_abb').validate({});
$('[name="radnummer_varde[<?php echo $kk['radnummer'];?>]"]').rules('add', {
required: true,
messages: {
required: "At least one option needed."}
});
});
</script>

0

Решение

«Можно ли настроить jQuery для проверки динамически создаваемых переключателей?»

Да, это ничем не отличается от добавления проверки к любому динамически созданному элементу.

Сначала давайте рассмотрим эту часть вашего кода …

var AbbRedigeraForm = function () {

return {

initAbbRedigeraForm: function () {
// Validation
$("#redigera_abb").validate({
// Regler för validation
rules:
{
'radnummer_varde[]':
{
required: true
},
....
  1. Ты бы не ставил нормально .validate() внутри функции. Это не метод тестирования … .validate() это инициализация метод. Следовательно, .validate() идет только внутри обработчика готовности DOM, где он вызывается один раз инициализировать плагин в вашей форме. В противном случае проверка не будет готова, когда вам это нужно и / или .validate() метод вызывается повторно.

  2. Вы не можете объявить правило в пределах rules вариант .validate() если у вас нет точный name элемента. поскольку radnummer_varde[] на самом деле не факт name, это объявление правила ничего не делает.

  3. Незначительный момент, но вы никогда не должны использовать форматирование кода в стиле Allman в JavaScript. Зачем? Так как JavaScript использует «Автоматическую вставку точек с запятой». Это также усложняет чтение кода для людей, знакомых с более типичным для JavaScript форматом 1TBS.


Решения для динамически создаваемых элементов …

ОПЦИЯ 1: Просто включите объявление правила в линию с элементом, вместо с использованием rules вариант в .validate(), Для required Правило, вы можете использовать class или HTML 5 required атрибут следующим образом …

<input type="radio" name='radnummer_varde[1]' class="required" ...

ИЛИ ЖЕ

<input type="radio" name='radnummer_varde[1]' required="required" ...

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

ВАРИАНТ 2: Использовать плагина .rules('add') метод немедленно после вы динамически создали элементы ввода. (Вы не показали, как эти элементы «динамически» создаются.)

// your code that dynamically creates the element

// declare the rule on the new element
$('[name="radnummer_varde[1]"]').rules('add', {
required: true,
messages: { // optional
required: "custom message"}
});

ВАРИАНТ 3: Ваши элементы на самом деле не создаются «динамически», но вы не знаете точного name заблаговременно. Используйте селектор «начинается с», чтобы получить все эти элементы, и jQuery .each() применить метод ко всем элементам.

$('[name^="radnummer_varde"]').each(function() {
$(this).rules('add', {
required: true,
messages: { // optional
required: "custom message"}
});
});

ЗАМЕТКИ:

  1. Неважно, как вы объявляете правила, каждый вход должен содержать name приписывать.

  2. Использование .rules() не отрицает использование .validate() метод. Вы, должно быть, уже звонили .validate() в форме, чтобы инициализировать плагин, прежде чем вы можете позвонить .rules(),

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


«Как я могу использовать JQuery для проверки переключателей?»

Я заметил, что ваш HTML для радиокнопки может содержать checked="checked" при определенных условиях. Просто имейте в виду, что если переключатель загружается на страницу, как проверено, то нет ничего для проверки, потому что required Правило уже выполнено.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]