我正在尝试使用jQuery(fiddle)创建一个简单的自定义复选框。
我不明白为什么它不检查/取消选中真正的复选框。 Ids选择器正确传递,实时值也是如此。
相关的html:
<div id="corpo">
<div id="checkoptions">
<div><label>Option 1 <input type="checkbox" id="option1" checked></label></div>
</div>
</div>
相关的javascript:
// custom checkboxes
$('#corpo input[type=checkbox]').each(function(){
var checkbox = $(this), checkid = checkbox.attr('id'),
checked = '', content = '✗';
if(checkbox.is(':checked')){ var checked = ' checked', content = '✓'; }
checkbox.hide()
.after('<div class="checkbox'+checked+'" id="c-'+checkid+'"><span>'+content+'</span></div>');
});
// update custom checkboxes values
$('#corpo').on('click','.checkbox',function(){
var fakeCheckbox = $(this),
realID = fakeCheckbox.attr('id').replace('c-',''),
realCheckbox = $('#'+realID), checked = realCheckbox.is(':checked');
if(checked){
realCheckbox.attr('checked',false);
fakeCheckbox.removeClass('checked').find('span').html('✗');
}else{
realCheckbox.attr('checked',true);
fakeCheckbox.addClass('checked').find('span').html('✓');
}
});
我已尝试取消隐藏原始复选框,使用prop('checked',false)
和removeAttr('checked')
代替attr('checked',false)
。
我也需要更新真实的复选框,在“假”复选框中切换类是不够的。
答案 0 :(得分:2)
$('#corpo').on('click','.checkbox',function(e){
var isChecked = $(this).is('.checked');
$(this).html(isChecked ? '✗' : '✓').toggleClass('checked');
$('#'+this.id.replace('c-','')).prop('checked', !isChecked);
//solve the annoying select issue
document.onselectstart = function() { return false; };
e.target.ondragstart = function() { return false; };
return false;
});
答案 1 :(得分:1)
您遇到is(':checked')
问题,更改了代码并删除了ID检测:
// update custom checkboxes values
$('#corpo .checkbox').on('click',function(){
var fakeCheckbox = $(this),
realCheckbox = $(this).siblings('input'),
checked = fakeCheckbox.hasClass('checked');
if(checked){
fakeCheckbox.removeClass('checked').find('span').html('✗');
realCheckbox.removeAttr('checked');
}else{
fakeCheckbox.addClass('checked').find('span').html('✓');
realCheckbox.attr('checked','checked');
}
});