Хотелось бы, чтобы не выбранные переключатели возвращали пустую строку

#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 независимо.