jQuery:选中,然后将每个选中的值添加到字符串中

时间:2014-05-19 18:50:49

标签: jquery each checked

我有一个表单,我希望已检查的值在div中输出到屏幕。我的代码忽略了:checked部分,当复选框被选中时,它会将值输出到div但是在取消选中时它不会删除它。

此外,它不会将它们添加到列表中,而是用旧的替换最后一次单击的复选框值...

这是我的代码:

    jQuery('.detectChangeCheckbox').click(function(){

        jQuery(".detectChangeCheckbox").change(function () {

        var stepId = jQuery(this).attr("rel");

        var str = "You have selected: ";

        if(jQuery("detectChangeCheckbox:checked")){

            jQuery(this).each(function () {

                str += jQuery(this).val() + " ";

            });

        };

        jQuery("#liveResult"+stepId).text(str);

  })

  .change();

  });

由于

2 个答案:

答案 0 :(得分:0)

问题似乎出现在你的if条件中:

if(jQuery("detectChangeCheckbox:checked")){

这里你错过了.这是jQuery中的css类选择器表示,你应该检查检查的长度:

if(jQuery(".detectChangeCheckbox:checked").length){

注意:

您不需要使用click处理程序包装它,change事件就可以。{/ p>


相反,我建议你这样做:

jQuery(".detectChangeCheckbox").change(function () {
    var stepId = jQuery(this).attr("rel");
    var idx    = $(this).index();
    var arr    = [];
    ($(this).is(':checked')) ? arr.push(this.value) : arr.splice(1, idx);
    jQuery("#liveResult"+stepId).text(arr.join());
});

答案 1 :(得分:0)

偶然 - 不确定为什么click嵌套在.change中 - 除非您不希望在点击之后绑定change事件,否则不要这样做。我只能猜测这是你想要的代码:

jQuery(".detectChangeCheckbox").change(function () {
    var stepID = jQuery(this).attr("rel");
    if (this.checked) {
        var checkedValues = jQuery(".detectChangeCheckbox:checked").map(function() {
            return this.value;
        }).get().join(" ");
        jQuery("#liveResult"+stepID).text(checkedValues);
    }
});