Как мне прослушать изменения выбранного значения RadioGroup, используя JQuery? - PullRequest
21 голосов
/ 03 ноября 2010

Мне нужно зарегистрировать обработчик для группы переключателей.Я использую JQuery и надеялся, что его метод .change сделает это.Однако я не испытал желаемого поведения.

Вот пример кода, который я написал.К сожалению, «radioValueChanged» вызывается только при начальной загрузке.Выбор true / false не вызывает обработчик.

<html>
<script src="jquery-1.4.2.min.js" type="text/javascript"></script>

<form id="myForm">
    <div id="Question1Wrapper">
        <div>
            <input type="radio" name="controlQuestion" id="valueFalse" value="0" />
            <label for="valueFalse">
                False</label>
        </div>
        <div>
            <input type="radio" name="controlQuestion" id="valueTrue" value="1" />
            <label for="valueTrue">
                True</label>
        </div>
    </div>
    <div id="Question2Wrapper">
        <div>
            <label for="optionalTextBox">
                This is only visible when the above is true</label>
            <input type="text" name="optionalTextBox" id="optionalTextBox" value="" />
        </div>
    </div>

    <script type="text/javascript">
        jQuery(document).ready(function ()
        {
            $("#controlQuestion").change(radioValueChanged('controlQuestion'));
        })

        function radioValueChanged(radioName)
        {
            radioValue = $('input[name=' + radioName + ']:checked', '#myForm').val();

            alert(radioValue);

            if(radioValue == 'undefined' || radioValue == "0")
            {
                $('#Question2Wrapper:visible').hide();
            }
            else
            {
                $('#Question2Wrapper:visible').show();
            }
        } 
    </script>
</form>

Ответы [ 2 ]

33 голосов
/ 03 ноября 2010

Здесь есть несколько проблем.

  1. Вы сразу запускаете radioValueChanged('controlQuestion') при выполнении скрипта, потому что это вызов метода, а не назначение функции.

  2. Селектор $("#controlQuestion") неправильный, у вас нет элементов с идентификатором controlQuestion.

  3. Метод radioValueChanged неправильно обрабатывает значениякак они будут переданы в обработчик событий jQuery.

Вы можете попробовать что-то вроде следующего:

jQuery(document).ready(function ()
    {
        $("input[name='controlQuestion']").change(radioValueChanged);
    })

    function radioValueChanged()
    {
        radioValue = $(this).val();

        alert(radioValue);

        if($(this).is(":checked") && radioValue == "0")
        {
            $('#Question2Wrapper').hide();
        }
        else
        {
            $('#Question2Wrapper').show();
        }
    } 

Честно говоря, я не уверен, что этоэто реальная логика, которую вы ищете в операторе if, но, надеюсь, это послужит вам основой для исправления текущего кода.

0 голосов
/ 03 ноября 2010
$('#Question2Wrapper:visible').show();

Извлеките : видимый , он будет выбран только в том случае, если div уже отображается, фактически он никогда не будет отображаться, если он скрыт.

$('#Question2Wrapper').show();

Я отвлекся, я думаю, что Квинтин набирает большинство очков.Здесь происходит несколько проблем.

...