【问题标题】:Add number of radio buttons selected (in php/js)添加选中的单选按钮数量(在 php/js 中)
【发布时间】:2011-08-04 03:21:48
【问题描述】:

我有 5 组单选按钮,set1、set2、set3、set4、set5。每个值都是是/否。

我需要在隐藏的文本框中显示“是”的数量..即 1、2、3、4 或 5,并且随着人们选择不同的选项而明显改变..

<input type="radio" name="set1" id="set1_no" value="no">
<input type="radio" name="set1" id="set1_yes" value="yes">

<input type="radio" name="set2" id="set2_no" value="no">
<input type="radio" name="set2" id="set2_yes" value="yes">

<input type="radio" name="set3" id="set3_no" value="no">
<input type="radio" name="set3" id="set3_yes" value="yes">

<input type="radio" name="set4" id="set4_no" value="no">
<input type="radio" name="set4" id="set4_yes" value="yes">

<input type="radio" name="set5" id="set5_no" value="no">
<input type="radio" name="set5" id="set5_yes" value="yes">


<input type="hidden" name="number_of_yes" value="" readonly="readonly">

【问题讨论】:

    标签: java php javascript


    【解决方案1】:

    鉴于您正在设置一个隐藏字段(顺便说一下,它不需要是只读的,因为它是......嗯......隐藏)我可能只会更新它 onsubmit 的 @987654324 @。如果您真的需要随时更新它,只需使用onclickonchange。无论你触发它,你都可以尝试这样的事情:

    yourForm.onsubmit = setYesCount;
    
    function setYesCount() {
      var count = 0;
    
      // could use yourForm.getElementsByTagName(),
      // but since the OP didn't provide surrounding HTML:
      var els = document.getElementsByTagName("input");
      for (var i=0; i < els.length; i++) {
        if (els[i].type === "radio" && els[i].checked && els[i].value === "yes")
          count++;
      }
      // add an id attribute to the hidden input
      // for the following to work
      document.getElementById("number_of_yes").value = count;
    }
    

    (如果我不说,其他人会这样做:你可以用 jQuery 在一两行代码中做到这一点。)

    编辑:jQuery 版本 - 我再次将它放在表单的提交事件中(我假设您有一个表单并且可以填写 id)。如果需要,您可以将其更改为更改或单击事件。

    $(document).ready(function() {
      $("#yourFormsId").submit(function() {
             $('input[name="number_of_yes"]').val(
                $('input:checked[type="radio"][value="yes"]').length);
      });
    });
    

    【讨论】:

    • 太棒了!唯一的问题是我有另一组或单选按钮具有是/否值..我可以将是/否更改为可能克服的 yesX/noX..或者我应该链接这些单选按钮集吗?
    • 好吧(你已经注意到了)我的示例 jQuery 代码使用了一个选择器来获取所有的单选按钮。如果您需要为不同的组保留单独的总计,您可以通过多种方式细化选择器,例如: (A) 基于某些包含元素进行选择; (B) 使用attribute starts with 选择器语法并适当地命名不同的组; (C) 给每个组一个自己的类并选择它。 jQuery 的selector doco 有很多选项和示例。
    • (A) 单选按钮集名称? set1、set2、set3 等?
    • 除了上面的单选按钮,我还有另一个单选组:
    • 现在这个单选集在其他单选按钮之前。因此,如果在此单选按钮中选择单选选项 3,则仅检查前 3 个单选集的“是”.. set1、set2、set 3 等,如果他们选择 1,则仅检查 set1.. 希望这有意义吗?复杂?
    【解决方案2】:

    您可以在单击 NO 或 YES 时使用 javascript 来维护计数器变量。为所有 NO 和 YES 按钮定义一个类

    我会想象做这样的事情

    var ctr = 0;
    $(document).ready( function($) {
         $(".noradio").click((function () {
                     if (ctr != 0)
                     {
                         ctr--;
                     }
               })
         $(".yesradio").click()(function () {
                         ctr++;
               })
         $('input[name=hiddeninputname]').val(ctr);
    });
    

    【讨论】:

    • 你想要.click(function() ... 而不是.click()(function() ...。而且您的“是”单击处理程序在应该递增时递减,尽管我认为您最好每次重新计算总数而不是尝试保持运行总数:不太可能出现奇怪的错误(尤其是当您的 ctr 变量是全局),也适用于以编程方式设置值的情况。
    • 感谢您的反馈。按照建议修复代码。命名变量是否更独特可以解决问题?只是想说明OP必须做这样的事情......
    猜你喜欢
    • 2012-02-14
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    相关资源
    最近更新 更多