【问题标题】:Removing specific elements from global array on checkbox check and un-check with JavaScript在复选框检查和取消选中 JavaScript 时从全局数组中删除特定元素
【发布时间】:2010-11-22 15:31:10
【问题描述】:

当用户选中或取消选中表单中的复选框时,我正在尝试更新全局数组。然后该数组将被提交给服务器以更新数据库中选中的选项。 我已经将选中复选框的 ID 推送到数组中,但不确定如何删除它们。

我创建了一个基本的 jsFiddle 在这里演示:

http://jsfiddle.net/ArFuz/

PS - 稍后将正确命名该数组:)

【问题讨论】:

    标签: javascript jquery arrays push splice


    【解决方案1】:

    为什么每次点击都会这样做,只需在提交表单时执行 - 您也可以使用 :checked 选择器,而不是选择和迭代您不感兴趣的元素。

    正如 jyoseph 建议的那样 - 您可以在此处使用序列化数组来构建名称/值数组

    例如

    $('#submitButton').click( function(ev){
    
       var ids = [];
    
        $(':checkbox:checked').each( function(){
    
             ids.push(this.id);
    
        });
    
       //do something with ids
    
    });
    

    【讨论】:

    • 问题是表格中有分页。每次调用页面时,都没有更新以太值的帖子。因此全局数组和每次检查/取消检查都需要更新。
    • @RyanP13 啊 - 最新的需求新闻!有了这些信息,我就不会说上面的话了!
    • PS 我会使用 .delegate 而不是所有复选框上的点击事件
    • 对此表示歉意。迫于压力,急忙提问。减速以加速的情况:) 是的,我通常也会使用委托。
    【解决方案2】:

    由于您每次都在遍历所有复选框,因此只需在开头清空数组,然后只将选中的项目放回:

    ids = [];
    
    if (this.checked) {    
        ids.push(this.id);
    }
    

    【讨论】:

    • 希望你不要介意,我把$(this).is(":checked")换成更高效的this.checked,把$(this).attr("id")换成更高效的this.id。 OP 的代码有一个小错误,我也修复了。为您的回答 +1。
    【解决方案3】:

    我认为您可能对 jQuery serializeArray() (api link) 很满意

    $('#myForm input[type=checkbox]').change(function(){
    
        // get all checked checkboxes
        var ids = $('myForm input[type=checkbox]:checked').serializeArray();
    
    });
    

    编辑:JSBin example

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-24
      • 2015-12-14
      • 2018-09-15
      • 1970-01-01
      • 2016-07-12
      • 1970-01-01
      • 2020-06-28
      • 2014-05-05
      相关资源
      最近更新 更多