只考虑jQuery中更改的复选框
我在页面上有几个复选框(一些已经通过html选中属性选中)和一个提交按钮。我想使用jquery来运行一个使用$.each()循环的函数,这样,如果选中了复选框,它就会执行该函数,但前提是它尚未选中。另外,我想为每个未选中的复选框执行一个函数,但前提是它已经被选中只考虑jQuery中更改的复选框,jquery,checkbox,each,Jquery,Checkbox,Each,我在页面上有几个复选框(一些已经通过html选中属性选中)和一个提交按钮。我想使用jquery来运行一个使用$.each()循环的函数,这样,如果选中了复选框,它就会执行该函数,但前提是它尚未选中。另外,我想为每个未选中的复选框执行一个函数,但前提是它已经被选中 请帮助执行此操作的一种方法是使用.data()存储复选框的原始值 $(document).ready(function(){ $("input[type='checkbox']").each(function(){
请帮助执行此操作的一种方法是使用
.data()
存储复选框的原始值
$(document).ready(function(){
$("input[type='checkbox']").each(function(){
$(this).data("originalValue", $(this).is(":checked"));
})
});;
$("#ok").click(function(){
$("input[type='checkbox']").each(function(){
var edited = $(this).data("originalValue") !== $(this).is(":checked");
if (edited)
{
var checkboxLabel = $(this).next("label");
alert("edited: " + checkboxLabel.text());
}
});
});
检查用户交互而不是更改的原始解决方案:以下是第一种情况的选择器:
$("input[type='checkbox']:not([checked]):checked");
下面是第二种情况的选择器:
$("input[type='checkbox'][checked]:not(:checked)");
演示:若要仅对最初未选中的复选框做出反应,我建议:
$('#check').click(
function(e){
e.preventDefault();
var checkboxes = $('input:checkbox:checked');
checkboxes.each(
function(i){
if (this.defaultChecked == false) {
// do something, it wasn't checked on page-load, eg:
alert("This is a checkbox that wasn't originally checked.");
}
});
});
如果状态已从默认状态更改,则应采取措施,这似乎是您问题的基础:
$('#check').click(
function(e){
e.preventDefault();
var checkboxes = $('input:checkbox');
checkboxes.each(
function(){
if (this.defaultChecked !== this.checked) {
$(this).prev('label').addClass('changedFromDefault');
}
});
});
使用以下HTML:
<span>
<label for="one">one</label><input id="one" type="checkbox" checked />
</span>
<span>
<label for="two">two</label><input id="two" type="checkbox" />
</span>
<span>
<label for="three">three</label><input id="three" type="checkbox" />
</span>
<button id="check">Check</button>
参考资料:
$('#check').click(
function(e){
e.preventDefault();
var checkboxes = $('input:checkbox');
checkboxes.each(
function(){
if (this.defaultChecked !== this.checked) {
$(this)
.closest('span')
.removeClass('unchanged')
.addClass('changedFromDefault');
}
else {
$(this)
.closest('span')
.removeClass('changedFromDefault')
.addClass('unchanged');
}
});
});