【问题标题】:How to show-hide the button based on if the closest radio button is selected?如何根据是否选择了最近的单选按钮来显示隐藏按钮?
【发布时间】:2017-10-10 01:24:58
【问题描述】:

假设,我有两个测验问题。每个问题都有用于选择答案的单选按钮和一个用于清除答案的明确答案按钮。 仅当在其各自的问题块中选择/取消选择答案时,清除按钮才会隐藏/显示。

如何确定选择/取消选择的单选按钮是否是其最近的问题块并相应地显示/隐藏清除按钮?

还有,这是我目前正在使用的 JS 代码

jQuery(function($) {

if ($("input[type]").is(":radio")) {
    $(".answer").append("<button type='button' name='clear' >Clear</button>");
}

if ($("input[type=radio]:checked").length > 0) {
    $('button[name=clear]').show();
}
else{
    $('button[name=clear]').hide();
    }


$("input[type=radio]").on('click', function() {
    $nearest=  $(this).closest('.answer').find('button[name=clear]');
    $nearest.show();
});

$('button[name=clear]').on('click', function() {
    $(this).closest('.answer').find(':radio').prop('checked', false);
    $(this).hide();
});

if ($('.content').parent().hasClass("deferredfeedback")) {
    if ($('.answer .r0 input').prop('disabled')) {
        $("button[name=clear]").remove();
    }
} else {
    if (!($('div.im-controls').length)) {
        $("button[name=clear]").remove();
    }
}

});

我错过了一些我无法找到的东西,有人可以指导我吗?

【问题讨论】:

  • 你能分享你的html吗?也许你可以只使用 CSS 来做到这一点。
  • 您可以使用不同的想法来做到这一点,1)您可以将每个问题 + 按钮放在一个 div 中。因此,在单击按钮时,您可以获得父 div 并取消选择其中的所有单选按钮 2)为单选按钮和清除按钮提供一个棘手的 id 名称,因此在获取清除按钮 id 时,您可以找到与此相关的单选按钮。

标签: javascript jquery radio-button show-hide


【解决方案1】:

试试下面的代码

这里有js代码

jQuery(function($) {
  $("button").hide();
  $("input[type='radio']:checked").each(function(e){
        $(this).closest('.answers').find("button").show();
  });
  $("body").on("change","input[type='radio']" ,function(){
    $(this).closest('.answers').find("button").show();
  });

  $("body").on("click","button" ,function(){
    $(this).closest('.answers').find("input[type='radio']:checked").prop("checked",false);
    $(this).hide();
  });
})

click here to show jsFiddle demo

【讨论】:

  • 不建议在可以隐藏和显示的情况下删除和添加DOM元素
  • 现在看起来像我的了
  • 嗨,谢谢你的建议,但我想要保留清除按钮直到它被按下,假设,我有多个页面,每个页面都有 2 个问题。在当前情况下,如果我移到第二页,当我回到第一页时,清除按钮不再可见。
  • 您好,请检查您的解决方案的更新代码 - - - Amrata
【解决方案2】:

为什么没有清除按钮并隐藏它

CSS

.clearButton { display:none}

jQuery - 假设每个答案的容器都有“答案”类和
清除按钮有“clearButton”类:

$(function() {
  $(".answer").on("click","input[type=radio]",function() {
    $(this).closest(".answer").find(".clearButton").show();
  });
});

或者如果是兄弟姐妹:

$(function() {
  $(".answer").on("click","input[type=radio]",function() {
    $(this).siblings(".clearButton").show();
  });
});

为了清楚你可以使用

  $(".answer").on("click",".clearButton",function() {
    $(this).siblings("input[type=radio]").prop("checked",false);
    $(this).hide();
  });

如果已经检查了某些收音机,则在加载时显示清除按钮:

$("[type=radio]:checked").trigger("click")

$(function() {
  $(".answer").on("click", "input[type=radio]", function() {
    $(this).closest(".answer").find(".clearButton").show();
  });


  $(".answer").on("click", ".clearButton", function() {
    $(this).siblings("input[type=radio]").prop("checked", false);
    $(this).hide();
  });


  $("[type=radio]:checked").trigger("click")

});
.clearButton {
  display: none
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="answer">
  <label><input type="radio" name="answer1" value="1">Answer 1</label>
  <label><input type="radio" name="answer1" value="2">Answer 2</label>
  <label><input type="radio" name="answer1" value="3">Answer 3</label>
  <button type="button" class="clearButton">Clear</button> 
</div>
<hr/>
<div class="answer">
  <label><input type="radio" name="answer2" value="1">Answer 1</label>
  <label><input type="radio" name="answer2" value="2" checked>Answer 2</label>
  <label><input type="radio" name="answer2" value="3">Answer 3</label>
  <button type="button" class="clearButton">Clear</button> 
</div>

【讨论】:

  • 嗨,谢谢你的建议,但我想要保留清除按钮直到它被按下,假设,我有多个页面,每个页面都有 2 个问题。在当前情况下,如果我移到第二页,当我回到第一页时,清除按钮不再可见。
  • 请查看更新。最后一条语句在事件处理程序之后进入 $function
  • 对不起,它不会触发点击
  • 好吧,我得到了解决方案。感谢您的努力 :)
  • @AmrataRamchandani - 请看我的例子 - 它有效。您需要在代码中正确插入它。我不得不猜测你的 HTML
猜你喜欢
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
  • 2011-02-16
  • 2021-10-01
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多