如何在jQuery中检索复选框值

lan*_*nqy 239 html checkbox jquery

如何使用jQuery获取选中的复选框值,并立即将其放入textarea?

就像这段代码一样:

<html>
  <head>
  </head>

  <body>
    <div id="c_b">
      <input type="checkbox" value="one_name" checked>
      <input type="checkbox" value="one_name1">
      <input type="checkbox" value="one_name2">
    </div>  

    <textarea id="t"></textarea>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

如果id="c_d"Ajax更新,则下面的altCognito代码不起作用.有什么好的解决方案吗?

cgp*_*cgp 317

这是一个有效的(参见示例):

 function updateTextArea() {         
     var allVals = [];
     $('#c_b :checked').each(function() {
       allVals.push($(this).val());
     });
     $('#t').val(allVals);
  }
 $(function() {
   $('#c_b input').click(updateTextArea);
   updateTextArea();
 });
Run Code Online (Sandbox Code Playgroud)

更新

几个月后,如果ID发生变化,就如何保持上述工作提出了另一个问题.好吧,解决方案归结为将updateTextArea函数映射到使用CSS类的通用函数,并使用live函数监视DOM以获取这些更改.

  • 我喜欢使用map这样的东西:$(':checked','#c_b').map(function(i,cb){return cb.value}).get().此外,这只是个人偏好,但我会将值与更改文本区域分开,例如:$(function(){$('#c_b input').click($('#t').val ($(':checked','#c_b').map(function(i,cb){return cb.value}).get())); $('#c_b input:first').triggerHandler('点击');}); (6认同)
  • 啊哈!优秀。您已经考虑了两种可能的情况。先生,辛苦了 ;) (2认同)

小智 120

您还可以以逗号分隔的字符串返回所有选中的复选框值.当您将其作为参数发送到SQL时,这也将使您更容易

下面是一个示例,它返回所有选中的复选框值,这些值在逗号分隔的字符串中具有名称"chkboxName"

这是javascript

function showSelectedValues()
{
  alert($("input[name=chkboxName]:checked").map(
     function () {return this.value;}).get().join(","));
}
Run Code Online (Sandbox Code Playgroud)

这是HTML示例

<html>
  <head>
 </head>
 <body>
  <div>
   <input name="chkboxName" type="checkbox" value="one_name" checked>
   <input name="chkboxName" type="checkbox" value="one_name1">
   <input name="chkboxName" type="checkbox" value="one_name2">
  </div>  
 </body>
 </html>
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢`map()`到`each()`方法!谢谢! (2认同)
  • 老实说,这是最好的答案.非常简单.我会删除"功能"和"警报",因为这会让一些人感到困惑,但代码很简单,做得很好. (2认同)

Kyl*_*ris 65

你的问题很模糊,但我认为这就是你所需要的:

$(function() { 
    $('input[type="checkbox"]').bind('click',function() {
        if($(this).is(':checked')) {
            $('#some_textarea').html($(this).val());
         }
   });
});
Run Code Online (Sandbox Code Playgroud)

编辑:哦,好吧..你去...你以前没有HTML.无论如何,是的,我认为你的意思是在点击时将值放在textarea中.如果你想在页面加载时将选中的复选框的值放入textarea(可能有一个很好的逗号分隔),它将如下所示:

$(function() { 
    $('#c_b input[type="checkbox"]:checked').each(function() { 
        $('#t').append(', '+$(this).val());
    });
});
Run Code Online (Sandbox Code Playgroud)

编辑2正如人们所做的那样,你也可以这样做来快捷我写的冗长的选择器:

$('#c_b :checkbox:checked').each(function() {
    $('#t').append(', '+$(this).val());
});
Run Code Online (Sandbox Code Playgroud)

......我完全忘记了那条捷径.;)


小智 49

这对我很有用:

alert($("input[name=chkboxName]:checked").map(function() {
    return this.value;
}).get().join(","));
Run Code Online (Sandbox Code Playgroud)

谢谢Mohamed ElSheikh

  • 还可以$('input [name = selection]:checked').map(function(){return this.value;}).toArray() (7认同)

小智 8

谢谢altCognito,您的解决方案有所帮助.我们也可以使用复选框的名称来完成此操作:

function updateTextArea() {         
   var allVals = [];
   $('[name=chkbox]:checked').each(function() {
      allVals.push($(this).val());
   });
   $('#t').val(allVals)
} 
$(function() { 
    $('#c_b input').click(updateTextArea);
    updateTextArea();
});
Run Code Online (Sandbox Code Playgroud)


And*_*ndy 6

以下内容可能很有用,因为我到这里寻找的是一个稍微不同的解决方案.我的脚本需要自动循环输入元素并且必须返回它们的值(对于jQuery.post()函数),问题是复选框返回它们的值而不管检查状态如何.这是我的解决方案:

jQuery.fn.input_val = function(){

    if(jQuery(this).is("input[type=checkbox]")) {
        if(jQuery(this).is(":checked")) {
            return jQuery(this).val();
        } else {
            return false;
        }
    } else {
        return jQuery(this).val();
    }
};
Run Code Online (Sandbox Code Playgroud)

用法:

jQuery(".element").input_val();
Run Code Online (Sandbox Code Playgroud)

如果给定的输入字段是复选框,则input_val函数仅在检查时返回值.对于所有其他元素,无论选中状态如何,都会返回该值.


pgc*_*gcd 5

如果您需要将值保存到变量,可以使用以下选项:

var _t = $('#c_b :checkbox:checked').map(function() {
    return $(this).val();
});
$('#t').append(_t.join(','));
Run Code Online (Sandbox Code Playgroud)

(map()返回一个数组,我发现它比textarea中的文本更方便).