Вот хороший подход, который вы можете попробовать:
- Напишите функцию, которая принимает группу переключателей и возвращает значение отмеченного переключателя
- Отделение прослушивателя событий отк функции, которая просматривает проверенное значение каждой группы форм и показывает / скрывает входные данные соответственно
- Прослушивает событие
'change'
вместо события 'click'
, так что вы можете быть уверены, что какое-то значение переключателяобновлен вместо запуска прослушивателя событий, когда пользователь нажимает переключатель, который уже отмечен.
Вы также должны сохранять каждый вход в переменную, чтобы не выполнять глобальный селектор jQuery каждый раз.Селектор требует времени, чтобы найти правильный элемент, и если вы измените селектор в будущем, вам не придется искать везде, где вы выполняете поиск jQuery.Также будет полезно сохранить все входных данных для быстрого массового отображения / скрытия.
Полученный код будет выглядеть примерно так:
// it is helpful to start each jQuery object variable name with a $ for clarity
var $container = $('.container'); // should probably add a more specific class to the container
var $requestTypeRadioBtns = $container.find('input[type="requestType"]');
var $sessionTypeRadioBtns = $container.find('input[type="sessionType"]');
var $requester = $container.find('.requester');
var $total = $container.find('.total');
var $teamName = $container.find('.teamname');
// etc...
var $teams = $container.find('.teams');
var $inputs = $([$requester, $total, $teamName, /* etc... */]);
function getRadioGroupValue($radioBtns) {
// .find only looks through child elements, so use .filter which checks the current elements
return $radioBtns.filter(':checked').val();
}
function radioGroupChangedListener() {
var requestType = getRadioGroupValue($requestTypeRadioBtns);
var sessionType = getRadioGroupValue($sessionTypeRadioBtns);
$inputs.hide();
if (requestType === 'Single User') {
$requester.show();
} else if (sessionType === 'Remote Session') {
$requester.show();
$teamName.show();
} else {
$inputs.show();
}
}
$requestTypeRadioBtns.change(radioGroupChangedListener);
$sessionTypeRadioBtns.change(radioGroupChangedListener);
Редактировать:Забыл включить назначение слушателя для события change
каждой группы переключателей.