【问题标题】:jQuery - display div based on radio button selectionjQuery - 基于单选按钮选择显示 div
【发布时间】:2013-07-24 09:52:16
【问题描述】:

可能的解决方案,但无法使其发挥作用:

$(function(){
  $('input[name="q10"]').click(function(){
    if ($(this).is(':checked'))
    {
    var flag=0;

    $("input[type='radio']:checked").each(function() {
      if($(this).val()==1 || $(this).val()==2 ){
        $("#disagree").show();
         flag++;
      }
      else if(($(this).val()==3 || $(this).val()==4) && flag==0)
        $("#agree").show();
    });
    }
  });
});

我有一个包含 10 个问题的页面 - 每个问题都有一个回答量表,如下所示:

<div id="rq1" class="row" onmouseover="changeBackgroundColor(this.id)" onmouseout="changeBackgroundColor2(this.id)">
<div class="col1">1.</div>
<div class="col2a">Question text</div>
<div class='colans'>
      <input  name='q1' value='4' id='q1a4' type='radio' onclick='mand();' />
</div>
<div class='colans'>
      <input  name='q1' value='3' id='q1a3' type='radio' onclick='mand();' />
</div>
<div class='colans'>
      <input  name='q1' value='2' id='q1a2' type='radio' onclick='mand();' />
</div>
<div class='colans'>
      <input  name='q1' value='1' id='q1a1' type='radio' onclick='mand();' />
</div>
<div class='colans'>
      <input  name='q1' value='-1' id='q1a-1' type='radio' onclick='mand();' />
</div>
</div>

以上 10 个问题中的每一个都重复了 q1 到 q10。

在 10 个问题的末尾,我有两个textareas,用户可以在其中编写 cmets,但是,如果用户选择 ANY 响应,则需要出现第一个 textarea,其值为2 或 1。如果用户选择了值为 4 或 3 的 ANY 响应,但未选择值为 2 或 1 的响应,则需要显示第二个 textarea

最后,一旦用户回答了最后一个问题,即问题 10,我需要运行 jQuery——此时我需要触发代码。

过去,我为每个响应手动创建了 Javascript 代码并进行了检查,但我想知道是否有使用 jQuery 的更简洁、更简洁的方式?

【问题讨论】:

  • 你能告诉我你在上述解决方案中遇到了什么错误吗?
  • 上述代码在实施时只检查 1 个问题 - 我需要检查问题 1 到 10 以查看受访者选择的内容。有什么想法吗?

标签: jquery forms radio-button selection


【解决方案1】:

好吧,我没有很好地格式化代码,但我想这会对你有所帮助。此外,我检查了给出的最后一个答案,我想每次访问这个对象都不是一个好主意。但这只是我的意见。一切顺利:-)

`var myradio = $('input[name=nettype]');
var nettype = myradio.filter(':checked').val();

if(nettype ==1 || nettype ==2 )
{
 $("#myTextArea1").show();
 $("#myTextArea2").hide();
}
else if(nettype ==3 || nettype == 4 )
{
 $("#myTextArea2").show();
 $("#myTextArea1").hide();
}`

对于您添加到上一个答案的评论,您可以添加以下代码

`if ( $('.myClass').filter(function(){
    return $(this).val() != '';
    }).length == 0
 )
 {
  /* code to run when all are empty */

 }`

您可以将这个类名 myClass 添加到您的文本框中,这样当所有文本框都被回答时,您就可以触发单选按钮的代码。 :-)

【讨论】:

  • 谢谢,但同样,这仅提供部分解决方案 - 请参阅下面我对 rps 的回复。
  • 我已经编辑了我的答案。如果您为所有用于回答的 html 控件使用相同的类名,这将检查您的所有回答。
【解决方案2】:
var flag=0;

$("input[type='radio']:checked").each(function() {
  if($(this).val()==1 || $(this).val()==2 ){
    $("#myTextArea1").show();
     flag++;
  }
  else if(($(this).val()==3 || $(this).val()==4) && flag==0)
    $("#myTextArea2").show();
});

回答最后一个问题时触发此代码!!

更新: 这是完整的代码...

 $(document).ready(function() {

   $("#disagree").hide();
   $("#agree").hide();

   $("input[name='q10']").click(function() {

    $("#disagree").hide();
    $("#agree").hide();

    var flag=0;

    $("input[type='radio']:checked").each(function() {

       if($(this).val()==1 || $(this).val()==2 ){

           $("#disagree").show();
           $("#agree").hide();
           flag++;
       }

      else if(($(this).val()==3 || $(this).val()==4) && flag==0)

           $("#agree").show();
   });
 });    
});

【讨论】:

  • 感谢@rps - 这对于简单地显示相关文本区域很好 - 问题如下: 1. 只有当用户没有选择 1 和 2 时,才能显示第二个文本区域10 个问题,我需要代码在他们回答 q10 后立即触发(因此需要一次性检查所有问题 - 而不是在他们做出选择时)
  • @Homer_J 不,上面的代码不需要在回答所有问题时触发g,只需在回答最后一个问题时触发它就可以了
  • 谢谢@rps - 现在只是尝试实施 - 问题 - 即使我在用户选择 q10 选项时触发代码,这个问题是否会询问从 q1 到 q10 的所有问题?
  • @Homer_J onclick 本身是否有效? if(检查)条件中的代码是否会触发?先生,您为什么要检查“已检查”条件?这不是一个复选框,而是一个单选按钮,点击右键不会取消选中?
  • 我需要在单击 q10 的响应时触发您的 jQuery 代码(因此我要检查是否检查了 q10) - 工作正常,因为当我放置 alert 时它会正确触发。但是,当我添加您的代码时,它不起作用。
猜你喜欢
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 2020-06-29
  • 1970-01-01
  • 1970-01-01
  • 2014-02-06
  • 2017-04-28
  • 2014-04-21
相关资源
最近更新 更多