#jquery #html #ajax
#jquery #HTML #ajax
Вопрос:
У меня есть следующий HTML
<form id="create_form" name="create_form" action="" method="post">
<input name="type" id="type" value="individuel" type="radio" /> Individuel <br/>
<input name="type" id="type" value="course" type="radio" /> Course <br/>
<button class="n" type="submit">Create</button>
</form>
и когда я получаю значение переключателей, когда ни один из них не был выбран, мой скрипт jQuery / Ajax возвращает первую переключающую кнопку.
$(document).ready(function(){
$("form#create_form").submit(function() {
var type = $('input:radio[name=type]:checked').val();
...
Я бы хотел, чтобы пользователи были вынуждены учитывать, что выбрать, а не только значение по умолчанию.
Как это делается?
Обновить:
Я бы подумал, что
$(document).ready(function(){
$("form#create_form").submit(function() {
var type = $('input:radio[name=type]:checked').val();
означает получать значения переключателей только в форме с помощью id="create_form"
.
Но поскольку у меня были формы ниже (с <form id="something_else"
) и переключатели в этих формах также с name="type"
, он извлек это значение.
Изменение name=type
на name=cname
как в html, так и в jQuery решило проблему.
Звучит как ошибка в jQuery, не так ли?
Комментарии:
1. что, черт возьми, это такое??
id="type"
идентификатор должен быть уникальным2. Теперь это изменено =) Я думал,
id
что привык к стилю CSS, поэтому было нормально, чтобы они были одинаковыми.
Ответ №1:
Попробуйте определить переменную следующим образом (чтобы получить пустую строку):
var type = $('input:radio[name=type]:checked').val() || '';
Хммм, хорошо, чтобы ответить на вопрос о том, как заставить пользователя выбирать … попробуйте это вместо:
var type = $('input:radio[name=type]:checked').val();
if (typeof type === 'undefined') {
alert('You must make a choice!');
return false;
}
Комментарии:
1. Даже с
var type = $('input:radio[name=type]:checked').val() || '';
получаю ли я значение первой переключающей кнопки.2. Если установлен флажок на первом переключателе, так и будет; по умолчанию переключатели должны быть сняты… но я не уверен, верно ли это во всех браузерах.
Ответ №2:
если
( ! $("input:radio").is(':checked') )
Не работает?
Вы также можете попробовать вот так:
var is_checked = true;
$('input:radio').each(function(){
is_checked = is_checked amp;amp; $(this).is(':checked');
});
if ( ! is_checked );
Комментарии:
1. Нет, это тоже не сработало. Второй фрагмент кода возвращает значение true для
is_checked
независимо.