【问题标题】:Compare arrays, then take action based on result比较数组,然后根据结果采取行动
【发布时间】:2015-06-04 19:08:51
【问题描述】:

我正在处理一个带有一堆复选框的表单。在加载文档之前,通过 php 检查了一些复选框。我正在尝试确定用户是否选中了尚未从 php 脚本中选中的复选框。

如果他们选中其中一个未选中的复选框,我想显示一个包含文本区域的 div,他们可以在其中添加其他详细信息。

到目前为止,我认为最好的方向是将所有复选框的值和状态存储到一个数组中。 checked的状态存储为1,unchecked的状态存储为0。

每次单击复选框时,都会创建一个新数组,其中包含所有复选框的值和状态。然后将其与原始数组进行比较。如果在比较过程中识别出一个新的已选中复选框,则显示其中包含 textarea 的 div。

我想知道是否有人知道如何做这样的事情,或者有没有更好的方法来完成我想做的事情?

HTML:

<label><input type='checkbox' class='supress' name='suppressList[]' value='background' /></label>
<label><input type='checkbox' checked='checked' class='supress' name='suppressList[]' value='refsComp' /></label>
<label><input type='checkbox' class='supress' name='suppressList[]' value='I9' /></label>
<textarea id='details' name='additionalDetails'></textarea>

jQuery:

var status = $('input[type="checkbox"]').filter('.supress').map(function(){
var value = $(this).attr('value'); 
if($(this).is(':checked'))
     return { 'value':value, 'status' : 1}; 
else
    return { 'value':value, 'status' : 0};

});

【问题讨论】:

  • 还可以通过您的 PHP 将一个类应用于那些预先检查的元素。
  • 你想要这样:jsfiddle.net/fray12qe/9 ??

标签: jquery arrays checkbox compare


【解决方案1】:

一种简单的方法是为所有复选框设置类,并且确实需要更改事件

$(document).ready(function(){
$('.checkbox').change(function(event) {
    if ($(this).is(":checked")) {
         $(this).closest('tr').addClass('selected');
    }
    else {
         $(this).closest('tr').removeClass('selected');
    }
});    

});

请在小提琴http://jsfiddle.net/8gzn7ryh/中找到示例

【讨论】:

    【解决方案2】:

    我认为,只要您不弄乱选中的属性,您就可以相信它只存在于默认属性的事实。所以$('[checked]:checked') 会为您提供仍在检查的默认值,$(':not([checked]):checked') 将为您提供已检查但未默认的默认值。

    http://jsfiddle.net/hxo9xg9o/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多