244

如何使用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>

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

4

14 回答 14

326

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

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

更新

几个月后,另一个问题是关于如何在 ID 更改时保持上述工作。好吧,解决方案归结为将 updateTextArea 函数映射到使用 CSS 类的通用函数,并使用 live 函数来监视 DOM 的这些更改。

于 2009-04-24T15:01:15.903 回答
128

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

这是一个示例,它以逗号分隔的字符串返回所有选定的复选框值,其名称为“chkboxName”

这是javascript

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

这是 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>
于 2011-05-24T20:42:42.300 回答
66

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

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

编辑:哦,好吧..你去...你之前没有HTML。无论如何,是的,我认为您的意思是在单击该值时将其放入文本区域。如果您希望在页面加载时将选中的复选框的值放入 textarea(可能带有一个很好的逗号分隔符),它会很简单:

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

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

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

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

于 2009-04-24T14:51:19.950 回答
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();
});
于 2010-06-11T10:11:47.707 回答
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();
    }
};

用法:

jQuery(".element").input_val();

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

于 2010-12-28T05:00:41.307 回答
5

如果您需要将值保存到变量中,这是一种替代方法:

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

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

于 2012-04-04T13:48:17.500 回答
3
$(document).ready(function() {
  $(':checkbox').click(function() {
    var cObj = $(this);
    var cVal = cObj.val();
    var tObj = $('#t');
    var tVal = tObj.val();
    if (cObj.attr("checked")) {
      tVal = tVal + "," + cVal;
      $('#t').attr("value", tVal);
    } else {
      //TODO remove unchecked value.
    }
  });
});
于 2009-04-24T15:10:50.233 回答
3
 function updateTextArea() {         
     var allVals = $('#c_b :checked').map(function() {
       return $(this).val();
     }).get();
     $('#t').val(allVals)
  }
 $(function() {
   $('#c_b input').click(updateTextArea);
   updateTextArea();
 });
于 2011-03-04T07:03:25.527 回答
2
$("#t").text($("#cb").find(":checked").val())
于 2009-04-24T14:51:13.460 回答
2

无论如何,你可能需要这样的东西:

 var val = $('#c_b :checkbox').is(':checked').val();
 $('#t').val( val );

这将获取页面上第一个选中复选框的值,并将其插入到文本区域中id='textarea'

请注意,在您的示例代码中,您应该将复选框放在一个表单中。

于 2009-04-24T14:52:18.687 回答
2

使用另一篇文章的答案,我用来完成相同任务的一种更简单、更简短的方法是这样的:

var checkedCities = $('input[name=city]:checked').map(function() {
    return this.value;
}).get();

最初,城市是从 MySQL 数据库中检索的,并在 PHP while 循环中循环:

while ($data = mysql_fetch_assoc($all_cities)) {
<input class="city" name="city" id="<?php echo $data['city_name']; ?>" type="checkbox" value="<?php echo $data['city_id']; ?>" /><?php echo $data['city_name']; ?><br />
<?php } ?>

现在,使用上面的 jQuery 代码,我得到所有 city_id 值,并使用 $.get(...) 提交回数据库

这让我的生活变得如此轻松,因为现在代码是完全动态的。为了添加更多的城市,我只需要在我的数据库中添加更多的城市,不用担心 PHP 或 jQuery 端。

于 2014-01-09T22:54:06.247 回答
0

如果您想在检查时立即插入任何复选框的值,那么这应该适合您:

$(":checkbox").click(function(){
  $("#id").text(this.value)
})
于 2009-04-24T14:55:03.843 回答
0

我遇到了类似的问题,这就是我使用上面的示例解决它的方法:

 $(".ms-drop").click(function () {
        $(function showSelectedValues() {
            alert($(".ms-drop input[type=checkbox]:checked").map(
               function () { return this.value; }).get().join(","));
        });
    });
于 2013-11-05T20:00:44.030 回答
0

试试这个。。

var listCheck = [];
console.log($("input[name='YourCheckBokName[]']"));
$("input[name='YourCheckBokName[]']:checked").each(function() {
     console.log($(this).val());
     listCheck .push($(this).val());
});
console.log(listCheck);
于 2014-11-17T19:13:27.250 回答