Как я могу прослушать изменения в выбранном элементе RadioGroup с помощью JQuery?
Мне нужно зарегистрировать обработчик для группы переключателей. Я использую JQuery и надеюсь, что его способ изменить выполнит это. Однако я не испытал желаемого поведения.
Вот пример фрагмента, который я написал. К сожалению, "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>
Ответы
Ответ 1
Здесь есть несколько проблем.
-
Вы сразу запускаете выполнение radioValueChanged('controlQuestion')
после script, потому что это вызов метода, а не назначение функции.
-
Селектор $("#controlQuestion")
неверен, у вас нет элементов с идентификатором controlQuestion
.
-
Метод 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, но, надеюсь, это даст вам основу для исправления текущего кода.
Ответ 2
$('#Question2Wrapper:visible').show();
Выньте : visible, это выберет его, только если div уже отображается, по сути, он никогда не будет отображаться, если он скрыт.
$('#Question2Wrapper').show();
Я отвлекся, я думаю, что Квинтин поражает большинство очков. Здесь есть несколько проблем.