我为我正在处理的网站创建了一个替换img复选框。我可以成功将复选框设为check
,但不能uncheck
。我可以在Inspect中看到这种变化。
代码有什么问题?页面中没有错误。谢谢!
HTML是:
<input type="checkbox" id="AcceptTerms_check" name="AcceptTerms_check" style="display:none;">
<img class="chk-img" id="AcceptTerms" onclick="CheckboxClick(this);" src="../../../wp-content/uploads/misc/notselected.png">
<span id="ts-cs-accept">I have read and accepted the terms</span>.
JS是:
function CheckboxClick(element) {
if(jQuery('input:checkbox[name=' + element.id + '_check]').is(":checked")) {
jQuery('input:checkbox[name=' + element.id + '_check]').attr('checked','false');
jQuery(element).attr("src", "../../../wp-content/uploads/misc/notselected.png");
} else {
jQuery('input:checkbox[name=' + element.id + '_check]').attr('checked','true');
jQuery(element).attr("src", "../../../wp-content/uploads/misc/selected.png");
};
};
答案 0 :(得分:3)
始终使用prop
复选框,因为您可以直接使用true
和false
值。您还可以大量减少代码,而不是重复复杂的jQuery选择器:
function CheckboxClick(element) {
var $checkbox = jQuery('input:checkbox[name=' + element.id + '_check]')
if($checkbox.prop("checked")) {
$checkbox.prop('checked', false);
jQuery(element).attr("src", "../../../wp-content/uploads/misc/notselected.png");
} else {
$checkbox.prop('checked', true);
jQuery(element).attr("src", "../../../wp-content/uploads/misc/selected.png");
};
};
这可以进一步简化,但我希望你仍然能识别你的代码:)
e.g。你可以用以下方式切换它:
$checkbox.prop("checked", !$checkbox.prop("checked"));
更新...不要将基于属性的事件与jQuery(例如onclick=
)一起使用,使用jQuery方式:
请尝试这种方式:http://jsfiddle.net/noy45sjg/1/
jQuery('.chk-img').click(function (e) {
var element = jQuery(this);
var $checkbox = jQuery('input:checkbox[name=' + this.id + '_check]');
if($checkbox.prop("checked")) {
$checkbox.prop('checked', false);
jQuery(element).attr("src", "../../../wp-content/uploads/misc/notselected.png");
} else {
$checkbox.prop('checked', true);
jQuery(element).attr("src", "../../../wp-content/uploads/misc/selected.png");
}
});