2011-05-05 22 views
2

我已经提到了这个帖子:收集复选框值,并张贴在提交

Post array of multiple checkbox values

这jQuery的论坛帖子:

http://forum.jquery.com/topic/checkbox-names-aggregate-as-array-in-a-hidden-input-value


我试图使用jQuery在隐藏输入字段中收集复选框值的数组(或逗号连接的字符串)。下面是我使用的脚本代码:

<script type="text/javascript"> 
$("#advancedSearchForm").submit(function() { 
var form = this; 
$(form).find("input[name=specialty]").val(function() { 
    return $("input:checkbox",form).map(function() { 
    return $(this).attr("name"); 
    }).get().join(); 
}); 
}); 
</script> 

相关的HTML的一个片段:

<form id="advancedSearchForm" name="advancedSearchForm" method="post" action="<?php echo site_url('/magcm/advancedSearch#results'); ?>"> 
<input type="checkbox" name="FCM" id="FCM" class="chk" value="FCM" <?php echo set_checkbox('FCM', 'FCM'); ?>/> 
<input type="hidden" name="specialty" id="specialty" value="" /> 
<input class="button" name="submit3" id="submit3" type="submit" value="Search" /> 

我试图改变“提交”到jQuery的,它打破(显然是“submit3” )。当我print_r($ _ POST)时,复选框POST正确,但浓缩隐藏变量不。 (它发布,但一个空值)。复选框使用CI的黑客入侵的set_value()函数(Derek需要在主干中实现此功能,但这是另一个故事)正确保存。

我确定我是做一些错误的,容易指出的事情。在过去的2个小时里,我只是一头撞墙,尝试各种功能,改变了大量的事情,并在Chrome开发工具中进行分析(不会显示任何错误)。

帮助表示赞赏。 :)

+0

“advancedSearchForm”应该是“#advancedSearchForm”以正确选择一个ID'd元素。 – 2011-05-05 22:25:29

+0

哎呀,这是代码中的错字。固定。实际上在这个视图中就是这样,它仍然是坏的。 – 2011-05-05 22:27:09

回答

1

我结束了使用PHP阵列,而不是jQuery的解决它:

<input type="checkbox" name="chk[]" id="RET" class="chk" value="RET" <?php echo set_checkbox('chk', 'RET'); ?>/> 

我的名字改为了数组并贴到我的剧本,我在那里通过数组循环和处理它。仍然不确定基于jQuery的解决方案存在什么问题,但我想我会在今后发布这个供大家参考的。

0

在JavaScript中有很多嵌套的函数(),使得很难遵循你正在做的事情。

但是,您似乎只是将一个函数传递给.val()而不是实际值。试试这个:

<script type="text/javascript"> 
$("#advancedSearchForm").submit(function() { 
var form = this; 
$(form).find("input[name=specialty]").val((function() { 
    return $("input:checkbox",form).map(function() { 
    return $(this).attr("name"); 
    }).get().join(); 
})()); 
}); 
</script> 

甚至更​​好,首先计算值:

<script type="text/javascript"> 
$("#advancedSearchForm").submit(function() { 
var form = this; 
var value = $("input:checkbox",form).map(function() { 
    return $(this).attr("name"); 
}).get().join(); 
$(form).find("input[name=specialty]").val(value); 
}); 
</script> 
+0

我用advancedSearchForm和#advancedSearchForm尝试了第二个例子,但没有运气。专业没有被张贴。 – 2011-05-05 22:31:39

+0

第一个工作?我也没有意识到你忘记了$()中的散列。 – Percy 2011-05-05 22:34:00

+0

都没有工作。 – 2011-05-05 22:38:36

4

比方说,你的应用类,也许“tehAwesomeCheckboxen”每一个复选框。然后

<script> 

$("#advancedSearchForm").submit(function() { 

    var chkbxValues = $(".tehAwesomeCheckboxen").val(); 
    $("#specialty").val(chkbxValues.join(",")); 

}); 

</script> 

编辑:

我不认为是越来越填充$ _POST数组,因为提交正在由JavaScript引擎在本地处理。 SO ...让我们试试这个:

<script> 
    var chkbxValues = new Array(); 

    $(".tehAwesomeCheckboxen").live("change", function(e){ 
     var val = $(this).val(); 

     if($(this).is(":checked")) { 
      if(chkbxValues.length == 0 || chkbxValues.indexOf(val) == -1){ 
       // Add the value 
       chkbxValues.push(val); 
      } 
     } 
     else { 
      // remove the value 
      chkbxValues.splice(chkbxValues.indexOf(val), 1); 
     } 

     $("#specialty").val(chkbxValues.join(",")); 
    }); 

</script> 

这增加了事件处理程序的复选框自己,这样检查/取消勾选框来改变隐藏的元素。然后你的表单像平常一样处理它的提交。

这是否更符合你想要做的?

P.S.这些谁upvoted,请注意我修改了我的答案。请确认您是否仍然觉得有用,并相应地调整您的投票。

+0

没有工作。不过谢谢。 – 2011-05-05 22:38:42

+0

只是FYI,你需要使用一些东西来看看生成的源,看看这是否做任何事情。 Chrome开发工具仅在服务器生成DOM时显示DOM。 Chrome或Firefox的Web Developer Toolbar都有这个选项。 – 2011-05-05 22:44:08

+0

我是print_r()'ing $ _POST。如果数据已发布,我会看到它。我有WDT for Chrome,它也没有显示任何东西。 – 2011-05-05 22:52:56