Не отправляйте форму, если ничего не выбрано, используя плагин jQuery ajaxForm - PullRequest
0 голосов
/ 22 июля 2009

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

Вот моя попытка на данный момент, благодаря такому коду, который я нашел в другом ответе SO и документации по плагину:

$(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 ]

2 голосов
/ 22 июля 2009

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

function ischecked(formData, jqForm, options)
{
    return $('input[name=answer]').is('checked');
}
2 голосов
/ 22 июля 2009

Все методы 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'). 

}

РЕДАКТИРОВАТЬ: обновил код после того, как автор опубликовал HTML.

...