2009-07-21 4 views
0

Я использую jQuery Form plugin, чтобы сделать «ajax» представление моей формы, состоящей из 4 радиостанций. Однако я хочу, чтобы форма не отправлялась, если ни одна из переключателей не была выбрана.Не отправляйте форму, если ничего не выбрано, используя jQuery плагин ajaxForm

Вот моя попытка до сих пор, чему так кода, который я нашел в другой SO ответить и плагин Docs:

$(document).ready(function() { 

    var options = { target: '#response', 
        type: 'get', 
        beforeSubmit: ischecked 
        } 

    $('#answer').ajaxForm(options); 

}); 


function ischecked(formData, jqForm, options){ 


    if ($('input:radio', $('#answer').is(':checked'))) 
    { 
      return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

Я уверен, что обратный вызов ischecked становится выполняется (alert() s будет срабатывать , и т. д.), но сам код не обнаруживает, что никакие переключатели не выбраны, и форма продолжает передаваться.

Вот HTML форма:

<form action="score.php" id="answer"> 
    <div style="margin-top: 0pt;" class="ans"> 
     <input type="hidden" value="127" name="question_id"/> 
     <input type="hidden" value="f5043d5122cec6eb981c9a2fc7a0a653" name="user_id"/> 
     <input type="hidden" value="36" name="question_key"/> 
     <input type="hidden" value="37" name="next_key"/> 

     <ul id="answers"> 
      <li> 
       <label> 
        <input type="radio" value="464" name="answer_id"/> mod_rewrite       </label> 
      </li> 
      <li> 
       <label> 
        <input type="radio" value="465" name="answer_id"/> XML Site Map       </label> 
      </li> 
      <li> 
       <label> 
        <input type="radio" value="466" name="answer_id"/> Tiny URL       </label> 
      </li> 
      <li> 
       <label> 
        <input type="radio" value="467" name="answer_id"/> both a) and b)       </label> 
      </li> 
      <li> 
       <label> 
        <input type="radio" value="468" name="answer_id"/> a), b) and c) can all be used to make it easier for Google to index your dynamically generated URLs.       </label> 
      </li> 
          </ul> 
    </div> 
    <input type="submit" value="Submit Answer and Get Result" id="answer_submission"/> 
</form> 

ответ

2

Все методы JQuery возвращают массив, если он не может найти соответствие, он возвращает пустой массив. Если вы проверите «пустой» массив с «if», он вернет true.

Попробуйте

function ischecked(formData, jqForm, options) 
{ 
    return $('input[name="answer_id"]:checked').length > 0; //Checking that the number of checked items are more than zero. 

    //You should also be able to use $('#answers input:checked'). 

} 

EDIT: Обновлен код после того, как автор отправил HTML.

+0

когда я делаю предупреждение ($ («# ответ: проверено») длина.) Это всегда 0, даже если у меня есть один из радио коробки выбранных. – Ian

+0

Не могли бы вы разместить свой HTML-код? – SolutionYogi

+0

Если ваши переключатели сгруппированы с использованием имени 'myGroup', попробуйте $ ('input [name = "myGroup"]: checked'). Length – SolutionYogi

2

Попробуйте это:

function ischecked(formData, jqForm, options) 
{ 
    return $('input[name=answer]').is('checked'); 
}