选择多个复选框并附加其值

Posted

技术标签:

【中文标题】选择多个复选框并附加其值【英文标题】:select multiple checkbox and append its value 【发布时间】:2014-07-12 13:13:11 【问题描述】:

这是场景,我有一个动态下拉按钮,每次用户选择它时,都会将带有复选框的名称列表查看到一个 div 中;

如果复选框被选中,值(ids)将附加到下面的文本区域中;如果未选中,它将删除该值。

问题是每次我选择下拉菜单并选中一个项目时,textarea 中的所有文本都会被删除。这是我的功能:

(function($) 
    jQuery.fn.multiselect = function() 
        $(this).each(function() 

            var checkboxes = $(this).find("input:checkbox");
            var selectAll  = $(this).find("input[class='checkAll']");

            selectAll.off('click').on('click', function() 
                $(this).closest('div').find(':checkbox').prop('checked', this.checked );
                $(this).closest('div').find(':checkbox').parent().toggleClass("multiselect-on", this.checked);
            );

            checkboxes.each(function() 
                var checkbox = $(this);

                checkboxes.on('change', function() 
                   $(this).parent().toggleClass("multiselect-on", this.checked);
                   var string = checkboxes.filter(":checked").map(function()
                      return this.value;
                   ).get().join(",");

                   $('#empid').val(string);

                );
            );
        );
    ;
    )(jQuery);

--感谢@undefined 最小化函数;)

[更新]函数

功能现在与全选选项相应地工作。但这个想法必须是;如果其中一项未选中,则必须取消选中全选选项!

在插件Multiple Select 中发现相同的想法我想包含在函数中

请大家再次赐教! ;(

【问题讨论】:

请提供问题上下文中的所有代码,如何设置下拉列表,它的侦听器等。 如果你可以在 checkboxes.on('click'.... @aboca 我在 select 上使用了内联 onchanged 函数并调用了函数 multiselect @Bhushan Kawadkar 我注意到了,但找不到将其组合在一起的方法 @mrrsb 那么每次你从下拉列表中更改一个项目时,它都会在那个时候遍历 DOM 元素,如果你更改了这些元素,那么它不会找到它们,因此它将填充文本为空白,因为没有选中复选框。我可能误解了你的问题。 【参考方案1】:

假设#chekeditem 正确选择了目标元素(textarea),您应该只使用val 方法而不是text。对于表单控件的设置/获取值,应使用val 方法。

请注意,您将多个点击处理程序附加到 each 循环中的元素:

checkboxes.each(function() 
    ...
    // Add selected checkbox in textarea
    checkboxes.on('click' ...

并且 jQuery on 方法在内部迭代集合,您不必首先使用循环。

你也可以缩小代码,不需要使用几个click(更好听change事件) handlers:

checkboxes.on('change', function() 
   $(this).parent().toggleClass("multiselect-on", this.checked);

   var string = checkboxes.filter(":checked").map(function()
      return this.value;
   ).get().join(",");

   $('#chekeditem').val(string);
);

如果应在事件绑定后立即调用处理程序,您可以使用change()trigger('eventName')triggerHandler() 方法触发事件。

checkboxes.on('change', function() ).change();

【讨论】:

感谢您指出这一点。 checkboxes.on('click'.. 用于高亮复选框 感谢@undefined!现在的问题是如何保留 textarea 中的值 我调用了该函数并将其应用于 DOM。也许您有更好的方法将其附加到 DOM? :) 在我的选择下拉列表中。我调用了一个函数 selectchanged(),该函数填充了名称列表。 code,然后我还调用了执行 fn.multiselect 的 selectfilter()。

以上是关于选择多个复选框并附加其值的主要内容,如果未能解决你的问题,请参考以下文章

使用从元素id的变量构建的数组,分离并附加复选框选择

在视图中使用复选框并在模型中获取其值

使用 jQuery 过滤复选框

视觉上禁用复选框,但允许它仍然提交其值

如何在 laravel 身份验证期间附加到用户创建多个复选框

使用复选框从 MySQL 中的多个表中选择数据,并根据复选框显示表字段