【问题标题】:Toggle Yes / NO with multiple questions使用多个问题切换是/否
【发布时间】:2015-05-11 07:48:57
【问题描述】:

我在一个表格中有 5 个问题,其中一些问题的回答是“是”/“否”。一旦用户选择了其中一个按钮,我希望能够切换是和否按钮。我遇到的问题是,如果回答了其中一个问题,而我回答了下一个问题,则会从所有其他问题中删除答案。我确定我缺少一些简单的东西。

* 更新 *

我的一切都按照我想要的方式进行了,谢谢大家的帮助。我现在注意到一件事,带有子问题的问题,当我选择是或否时,子问题会显示,但是如果我单击屏幕上的任何位置,它会从问题中删除活动类。

HTML:

 <div class="col-xs-12 col-md-6 col-md-offset-2 study-question" id="q-2">
                <p><strong>2.</strong> HAVE YOU HAD SHINGLES?</p>
                <input name="radio" type='hidden' value="Yes"/>
                <div class="btn-group btn-toggle">
                    <button type="button" class="btn btn-default yes-no btn-1" data-radio-name="radio">Yes</button>
                    <button type="button" class="btn btn-default yes-no" data-radio-name="radio">No</button>
                </div>
            </div>

           <div class="col-xs-12 col-md-6 col-md-offset-2 study-question" id="q-3">
                <p><strong>3.</strong> HAVE YOU HAD PAIN IN THE AREA OF THE SHINGLES RASH FOR AT LEAST THE LAST 3 MONTHS?</p>
                <input name="radio" type='hidden' value="Yes"/>
                <div class="btn-group" data-toggle="buttons">
                    <button type="button" class="btn btn-default yes-no" data-radio-name="radio" value="yes">Yes</button>
                    <button type="button" class="btn btn-default yes-no" data-radio-name="radio" value="no">No</button>

                    <div class="row">
                        <div class="col-xs-12 col-md-6 col-md-offset-2 study-question sub-question">
                            <p><strong>3A.</strong> IF IT HAS NOT YET BEEN 3 MONTHS, HOW LONG WOULD YOU ESTIMATE THIS PAIN HAS BEEN ONGOING?</p>
                            <input name="radio" type='hidden' value="Yes"/>
                            <input type="email" class="form-control study-form-control" id="how-many-year" placeholder="How long?">
                        </div>
                    </div>
                </div>
            </div>

JS

    $('.yes-no').click(function(){
    $(this).closest('div').find('.yes-no').each(function(){
        $(this).removeClass('active');
    });

    $(this).addClass('active');


    $(this).val()=='yes'?$(this).closest('div').find('.sub-question').show():$(this).closest('div').find('.sub-question').hide();

});

HTML

<div class="col-xs-12 col-md-6 col-md-offset-2 study-question">
  <p><strong>4.</strong> DO YOU HAVE ANY OTHER CHRONIC  PAIN THAT IS NOT ASSOCIATED WITH YOUR SHINGLES PAIN?</p>
  <input name="radio" type='hidden' value="Yes"/>
  <div class="btn-group" data-toggle="buttons">
    <button type="button" class="btn btn-default yes-no" data-radio-name="radio">Yes</button>
    <button type="button" class="btn btn-default yes-no" data-radio-name="radio">No</button>
  </div>
</div>

<div class="col-xs-12 col-md-6 col-md-offset-2">
  <p><strong>5.</strong> ARE YOU (CURRENTLY) TAKING MEDICINE TO MANAGE THE PAIN FROM SHINGLES?</p>
  <input name="radio" type='hidden' value="Yes"/>
  <div class="btn-group" data-toggle="buttons">
    <button type="button" class="btn btn-default yes-no" data-radio-name="radio">Yes</button>
    <button type="button" class="btn btn-default yes-no" data-radio-name="radio">No</button>
  </div>
</div>

JS

$('.btn-toggle').click(function() {
    $(this).toggleClass('active'); 
    console.log($(this));
});

我只是希望它针对用户正在尝试回答的当前问题,而不是一次解决所有问题。

【问题讨论】:

  • 顺便说一句,您正在对类元素“btn-toggle”调用点击函数,但我似乎在您的 html 中的任何地方都找不到它
  • 如果您想继续使用按钮控件,请在下面查看我的回答。

标签: javascript jquery html


【解决方案1】:

您可以使用.closest('div') 定位触发.change() 事件的元素最近的div,并使用.find() 定位该类。

一个处理MyToggle类元素的所有更改事件的函数

这将允许您对所有问题运行相同的函数,如下面的演示所示。

更新:是/否切换

演示

$(".MyToggle").click(function() {
    $(this).val()=='yes'?$(this).closest('div').find('.Questions').show():$(this).closest('div').find('.Questions').hide();
});
.Questions{display:none;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
    Yes<button class="MyToggle" value="yes">Yes</button> <button class="MyToggle"  value="no">No</button>
    <div class="Questions">Questions?</div>
</div>
<div>
    Yes<input type="radio" name="Q2" class="MyToggle" value="yes"/> No<input type="radio" name="Q2" class="MyToggle"  value="no"/>
    <div class="Questions">Questions?</div>
</div><div>
    Yes<input type="radio" name="Q3" class="MyToggle" value="yes"/> No<input type="radio" name="Q3" class="MyToggle"  value="no"/>
    <div class="Questions">Questions?</div>
</div>

我希望这会有所帮助。编码愉快!

【讨论】:

  • 谢谢,NewToJs,我查看了您的代码,这一切都说得通为了?我可以在按钮上使用值吗?
  • @icekomo 是的,只需在按钮中保持与收音机中相同的值和类,一切都应该可以正常工作。您还需要将.change() 事件替换为.click() 我已经更新了答案以显示您可以使用单选或按钮。
【解决方案2】:

看起来 NewToJS 用最接近的 DIV 击败了我,但我们使用 .each() 从 DIV 中的所有按钮中删除活动类,然后仅将活动类添加到单击的按钮。

此示例使用按钮而不是单选控件。

$('.yes-no').click(function(){
    $(this).closest('div').find('.yes-no').each(function(){
        $(this).removeClass('active');
    });
    $(this).addClass('active');
});

jsFiddle Demo


当需要总结所有答案时,你会这样做:

$('#mybutt').click(function(){
    var cnt = 0;
    var obj = {};
    $('.btn-group').each(function(){
        cnt++;
        obj[cnt] = $(this).find('.active').text();
    });
    alert( JSON.stringify(obj) );
});

jsFiddle Demo

【讨论】:

  • 我更新了这个问题,当我在屏幕上的任意位置单击某些按钮时会发生奇怪的事情,它会删除该活动状态
【解决方案3】:

您需要为每个按钮添加一个唯一的 id 或类,并为每个按钮链接一个点击函数,如下所示:

$('.btn-toggle').click(function() {
    $(this).toggleClass('active'); 
        console.log($(this));
 });

$('.btn-toggle2').click(function() {
    $(this).toggleClass('active'); 
        console.log($(this));
 });

$('.btn-toggle3').click(function() {
    $(this).toggleClass('active'); 
        console.log($(this));
 });

$('.btn-toggle4').click(function() {
    $(this).toggleClass('active'); 
        console.log($(this));
 });

或者,如果它们具有共同的功能,您可以像这样将它们组合在一起:

$('.btn-toggle', '.btn-toggle2', '.btn-toggle3', '.btn-toggle4') .click(function() {
    $(this).toggleClass('active'); 
        console.log($(this));
 });

【讨论】:

  • 顺便说一句,您正在对类元素“btn-toggle”调用点击函数,但我似乎无法在您的 html 中的任何地方找到它
  • 安德鲁,这似乎是一个过多的代码,基本上一遍又一遍地做同样的事情,最好运行一个函数,并可能抛出一个 switch 语句来帮助简化事情。只是一个想法:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多