У меня есть форма, которую я запускаю, когда нажимаю какую-нибудь кнопку радио-ввода.
<section>
<Label>Question</Label>
<p>
<input name='a' type='radio' value=1>value A<br/>
<input name='a' type='radio' value=2>value B<br/>
<input name='a' type='radio' value=3>value C<br/>
<input name='a' type='radio' value=4>valueD</p>
</section>
Также применяются правила CSS, которые я применяю:
div.hidden {
display: none;
height: 0px;
};
Код JS:
$("input[type='radio']").on("click", function(){
var allInputs = $(this).parent().find("input");
var NonChk = $(allInputs).not("input:checked");
hideSiblings(NonChk,"BR");
});
Когда я нажимаю какую-то кнопку, все, что я хочу видеть, это текущая строка: ввод, текст, бр.Остальные строки должны быть скрыты ... Это успешно происходит, но высота родительского элемента (тег p) не корректируется автоматически (кажется, что входные данные по-прежнему имеют неправильный размер - но IDK, если это проблема.
Вопрос прост: как скрыть строки входов, которые не выделены?
Это функция, которую я пишу, чтобы скрыть братьев и сестер на линиях, которые должны быть скрыты.
function hideSiblings(o, tilNextTagName, hideCurrentTag = true, tilNextTagHide = true){
var i, n, si;
var maxTries = 10;
if ( hideCurrentTag==true )
{
$(o).hide();
// console.log("this node input radio :");
// console.log(o.nodeName);
}
for (i=0; i<o.length; i++){
si = o[i];
for (n=0; n<maxTries; n++){
si = si.nextSibling;
if (typeof si.nodeName === "undefined" )
return false;
if ( si.nodeName == tilNextTagName ){
// console.log( si.nodeName+" === " + tilNextTagName );
if ( tilNextTagHide == true )
$(si).hide();
return true;
}
else
{
$(si).wrap("<div class=hidden></div>").hide();
break; // break inner loop
}
}
}
}
- Я оставляю коментарии в коде, чтобы вы могли легко добавить console.log