jQuery 检查复选框值是否在数组中
jQuery check if checkbox value in array
我有一个这样的用户 ID 数组:
var taskAssignTo = jQuery(this).attr('data-assigned');
var userArray = new Array();
userArray = taskAssignTo.split(",");
这会获取存储在 'data-assigned' attr 中的一串 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);
}
});
我可以看到数组的所有结果都是从 'data-assigned' attr 返回的。如果我将 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);
}
});
同样,这只是 returns 数组中的最后一项。
我所做的有什么明显的错误吗?
FIDDLE 此处: https://jsfiddle.net/Lvwhvadk/4/
您的第一个元素也匹配,但在 https://api.jquery.com/jQuery.inArray/
中引用
If the first element within the array matches value, $.inArray()
returns 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>
我有一个这样的用户 ID 数组:
var taskAssignTo = jQuery(this).attr('data-assigned');
var userArray = new Array();
userArray = taskAssignTo.split(",");
这会获取存储在 'data-assigned' attr 中的一串 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);
}
});
我可以看到数组的所有结果都是从 'data-assigned' attr 返回的。如果我将 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);
}
});
同样,这只是 returns 数组中的最后一项。
我所做的有什么明显的错误吗?
FIDDLE 此处: https://jsfiddle.net/Lvwhvadk/4/
您的第一个元素也匹配,但在 https://api.jquery.com/jQuery.inArray/
中引用If the first element within the array matches value, $.inArray() returns 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>