jQuery - 根据第一次点击选中的数据属性禁用复选框
jQuery - disable checkboxes based on firstly clicked checked data attribute
我有一个复选框列表。我需要禁用具有不同 data-groupid 的所有其他复选框,并保留启用相同 data-groupid 的复选框。当用户取消选中所有复选框时,所有复选框将再次可用。这是我的 HTML 的片段。组 ID 可以是任意数字,并且是动态生成的。
<input type="checkbox" value="1" name="mergeTicked[]" class="pickSheetCheck" data-groupid="1">
<input type="checkbox" value="2" name="mergeTicked[]" class="pickSheetCheck" data-groupid="2">
<input type="checkbox" value="3" name="mergeTicked[]" class="pickSheetCheck" data-groupid="1">
<input type="checkbox" value="4" name="mergeTicked[]" class="pickSheetCheck" data-groupid="1">
<input type="checkbox" value="5" name="mergeTicked[]" class="pickSheetCheck" data-groupid="2">
<input type="checkbox" value="6" name="mergeTicked[]" class="pickSheetCheck" data-groupid="1">
<input type="checkbox" value="7" name="mergeTicked[]" class="pickSheetCheck" data-groupid="4">
<input type="checkbox" value="8" name="mergeTicked[]" class="pickSheetCheck" data-groupid="3">
<input type="checkbox" value="9" name="mergeTicked[]" class="pickSheetCheck" data-groupid="3">
<input type="checkbox" value="10" name="mergeTicked[]" class="pickSheetCheck" data-groupid="6">
<input type="checkbox" value="11" name="mergeTicked[]" class="pickSheetCheck" data-groupid="6">
<input type="checkbox" value="12" name="mergeTicked[]" class="pickSheetCheck" data-groupid="6">
<input type="checkbox" value="13" name="mergeTicked[]" class="pickSheetCheck" data-groupid="1">
<input type="checkbox" value="14" name="mergeTicked[]" class="pickSheetCheck" data-groupid="1">
<input type="checkbox" value="15" name="mergeTicked[]" class="pickSheetCheck" data-groupid="3">
下面是我对 jQuery 的了解。我知道这是错误的,但我想我快到了。我还需要启用所有未选中的复选框。
$(document).ready(function(){
var $inputs = $(".pickSheetCheck");
function checkInput(thisObj){
var datagrp = thisObj.attr("data-groupid");
$(input:not[data-groupid=datagrp]).attr("disabled", true);
alert(datagrp);
}
$inputs.change(function() {
checkInput($(this));
});
});
我想做的事情看起来很简单,但我已经做了一段时间了!
编辑:
我已经开始工作了,但是如果没有选中复选框,我可以借助一些帮助'resetting'
$(document).ready(function(){
var $inputs = $(".pickSheetCheck");
function checkInput(thisObj){
var datagrp = thisObj.attr("data-groupid");
$( ".pickSheetCheck" ).not( '[data-groupid="'+datagrp+'"]' ).attr("disabled", true);
}
$inputs.change(function() {
checkInput($(this));
});
});
您可以将一些代码连接到所有复选框的 change
事件。
$('input[type="checkbox"]').change(function(){
var this_dataid = $(this).attr('data-groupid');
var this_checked = $(this).is(':checked');
$('input[type="checkbox"]').each(function(){
if ( $(this).attr('data-groupid') == this_dataid ) {
$(this).prop('checked', this_checked);
}else{
$(this).prop('checked', false);
}
});
});
您可以使用 jQuery 检查被点击元素的检查状态和自定义 data-groupid
值。我使用 jQuery 的 each
函数遍历所有其他 input
元素并使用 prop
.
相应地设置检查状态
要重置复选框,您可以只计算选中的复选框,如果有 none,则启用所有复选框。
if ($('.pickSheetCheck:checkbox:checked').length == 0) {
$inputs.attr('disabled', false);
} else {
$( ".pickSheetCheck" ).not( '[data-groupid="'+datagrp+'"]' ).attr("disabled", true);
}
我有一个复选框列表。我需要禁用具有不同 data-groupid 的所有其他复选框,并保留启用相同 data-groupid 的复选框。当用户取消选中所有复选框时,所有复选框将再次可用。这是我的 HTML 的片段。组 ID 可以是任意数字,并且是动态生成的。
<input type="checkbox" value="1" name="mergeTicked[]" class="pickSheetCheck" data-groupid="1">
<input type="checkbox" value="2" name="mergeTicked[]" class="pickSheetCheck" data-groupid="2">
<input type="checkbox" value="3" name="mergeTicked[]" class="pickSheetCheck" data-groupid="1">
<input type="checkbox" value="4" name="mergeTicked[]" class="pickSheetCheck" data-groupid="1">
<input type="checkbox" value="5" name="mergeTicked[]" class="pickSheetCheck" data-groupid="2">
<input type="checkbox" value="6" name="mergeTicked[]" class="pickSheetCheck" data-groupid="1">
<input type="checkbox" value="7" name="mergeTicked[]" class="pickSheetCheck" data-groupid="4">
<input type="checkbox" value="8" name="mergeTicked[]" class="pickSheetCheck" data-groupid="3">
<input type="checkbox" value="9" name="mergeTicked[]" class="pickSheetCheck" data-groupid="3">
<input type="checkbox" value="10" name="mergeTicked[]" class="pickSheetCheck" data-groupid="6">
<input type="checkbox" value="11" name="mergeTicked[]" class="pickSheetCheck" data-groupid="6">
<input type="checkbox" value="12" name="mergeTicked[]" class="pickSheetCheck" data-groupid="6">
<input type="checkbox" value="13" name="mergeTicked[]" class="pickSheetCheck" data-groupid="1">
<input type="checkbox" value="14" name="mergeTicked[]" class="pickSheetCheck" data-groupid="1">
<input type="checkbox" value="15" name="mergeTicked[]" class="pickSheetCheck" data-groupid="3">
下面是我对 jQuery 的了解。我知道这是错误的,但我想我快到了。我还需要启用所有未选中的复选框。
$(document).ready(function(){
var $inputs = $(".pickSheetCheck");
function checkInput(thisObj){
var datagrp = thisObj.attr("data-groupid");
$(input:not[data-groupid=datagrp]).attr("disabled", true);
alert(datagrp);
}
$inputs.change(function() {
checkInput($(this));
});
});
我想做的事情看起来很简单,但我已经做了一段时间了!
编辑:
我已经开始工作了,但是如果没有选中复选框,我可以借助一些帮助'resetting'
$(document).ready(function(){
var $inputs = $(".pickSheetCheck");
function checkInput(thisObj){
var datagrp = thisObj.attr("data-groupid");
$( ".pickSheetCheck" ).not( '[data-groupid="'+datagrp+'"]' ).attr("disabled", true);
}
$inputs.change(function() {
checkInput($(this));
});
});
您可以将一些代码连接到所有复选框的 change
事件。
$('input[type="checkbox"]').change(function(){
var this_dataid = $(this).attr('data-groupid');
var this_checked = $(this).is(':checked');
$('input[type="checkbox"]').each(function(){
if ( $(this).attr('data-groupid') == this_dataid ) {
$(this).prop('checked', this_checked);
}else{
$(this).prop('checked', false);
}
});
});
您可以使用 jQuery 检查被点击元素的检查状态和自定义 data-groupid
值。我使用 jQuery 的 each
函数遍历所有其他 input
元素并使用 prop
.
要重置复选框,您可以只计算选中的复选框,如果有 none,则启用所有复选框。
if ($('.pickSheetCheck:checkbox:checked').length == 0) {
$inputs.attr('disabled', false);
} else {
$( ".pickSheetCheck" ).not( '[data-groupid="'+datagrp+'"]' ).attr("disabled", true);
}