【问题标题】:jQuery check if checkbox value in arrayjQuery检查数组中的复选框值
【发布时间】:2018-08-08 09:30:41
【问题描述】:

我有一个这样的用户 ID 数组:

var taskAssignTo = jQuery(this).attr('data-assigned');
var userArray = new Array();
userArray = taskAssignTo.split(",");

这会得到一个存储在“数据分配”属性中的 id 字符串,用逗号分隔。

我尝试了以下方法来检查每个复选框,如果它的值在数组中,如下所示:

jQuery( ".assignTo input" ).each(function( index ) {
    var val = jQuery( this ).val();         
    if(jQuery.inArray(val, userArray)){
        jQuery( this ).prop('checked', true);
    }     
});

不过,这只检查数组中的最后一项。

如果我是这样console.log(val)

jQuery( ".assignTo input" ).each(function( index ) {
    var val = jQuery( this ).val();         
    console.log(val);
    if(jQuery.inArray(val, userArray)){
        jQuery( this ).prop('checked', true);
    }     
});

我可以看到数组的所有结果都是从“数据分配”属性返回的。如果我将 console.log(val) 移到这里:

jQuery( ".assignTo input" ).each(function( index ) {
    var val = jQuery( this ).val();                
    if(jQuery.inArray(val, userArray)){
        console.log(val);
        jQuery( this ).prop('checked', true);
    }     
});

同样,这只返回数组中的最后一项。

我所做的有什么明显错误吗?

FIDDLE HERE: https://jsfiddle.net/Lvwhvadk/4/

【问题讨论】:

  • 你能分享一个工作代码 sn-p 来演示这个问题吗?
  • 是的,我会编辑我的问题以包含一个小提琴。
  • 你不能在这里添加代码sn-p。查看编辑器中的{} 符号。

标签: jquery arrays each checked


【解决方案1】:

您的第一个元素也匹配,但在 https://api.jquery.com/jQuery.inArray/

中引用

如果数组中的第一个元素匹配值,$.inArray() 返回 0。

这使您的 if 条件为假。所以你的条件应该是jQuery.inArray(val, userArray)!==-1

您可以使用 Array.includes()

而不是这个

$(".editTask").click(function(event) {
  var taskAssignTo = jQuery(this).attr('data-assigned');
  var userArray = new Array();
  userArray = taskAssignTo.split(",");
  $(".assignTo input").each(function(index) {
    var val = $(this).val();
    if (userArray.includes(val)) {
      $(this).prop('checked', true);
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a title="Edit Task" href="#" data-id="1836" data-assign="" data-assigned="15,1" data-title="multiple users" data-content="<p>Task Description</p>" data-status="incomplete" class="editTask task-1836">EDIT</a>


<div class="assignTo">
  <p>Assign Task To Users</p>
  <label><input type="checkbox" name="project_assigned[]" value="15">User 15</label>
  <label><input type="checkbox" name="project_assigned[]" value="1">User 1</label>
  </div>

【讨论】:

  • @danyo 不客气,伙计!请务必将答案标记为正确:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-30
  • 1970-01-01
  • 2020-12-07
  • 2018-12-01
  • 1970-01-01
相关资源
最近更新 更多