Проблема: Я не могу проверить динамически созданные переключатели.
Вопрос: Как я могу использовать 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>
«Можно ли настроить jQuery для проверки динамически создаваемых переключателей?»
Да, это ничем не отличается от добавления проверки к любому динамически созданному элементу.
Сначала давайте рассмотрим эту часть вашего кода …
var AbbRedigeraForm = function () {
return {
initAbbRedigeraForm: function () {
// Validation
$("#redigera_abb").validate({
// Regler för validation
rules:
{
'radnummer_varde[]':
{
required: true
},
....
Ты бы не ставил нормально .validate()
внутри функции. Это не метод тестирования … .validate()
это инициализация метод. Следовательно, .validate()
идет только внутри обработчика готовности DOM, где он вызывается один раз инициализировать плагин в вашей форме. В противном случае проверка не будет готова, когда вам это нужно и / или .validate()
метод вызывается повторно.
Вы не можете объявить правило в пределах rules
вариант .validate()
если у вас нет точный name
элемента. поскольку radnummer_varde[]
на самом деле не факт name
, это объявление правила ничего не делает.
Незначительный момент, но вы никогда не должны использовать форматирование кода в стиле 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"}
});
});
ЗАМЕТКИ:
Неважно, как вы объявляете правила, каждый вход должен содержать name
приписывать.
Использование .rules()
не отрицает использование .validate()
метод. Вы, должно быть, уже звонили .validate()
в форме, чтобы инициализировать плагин, прежде чем вы можете позвонить .rules()
,
Если селектор прикреплен к .rules()
предназначается для группы элементов сразу, тогда вы должны использовать jQuery .each()
Функция или плагин будет использовать только первый соответствующий элемент.
«Как я могу использовать JQuery для проверки переключателей?»
Я заметил, что ваш HTML для радиокнопки может содержать checked="checked"
при определенных условиях. Просто имейте в виду, что если переключатель загружается на страницу, как проверено, то нет ничего для проверки, потому что required
Правило уже выполнено.
Других решений пока нет …