我有一个jQuery代码片段,如果输入特定表中的任何输入,它会更改该表上其余输入的类,但是如果用户填写输入字段,然后删除它们的输入它仍然会改变课程,尽管它不应该。这是我尝试这样做的。
$('#lostTable :input').change(function(){
var $lostTableInput = $('#lostTable :input:not(input[type=hidden])');
var hasData = false;
$lostTableInput.each(function(){
if($(this).val().length > 0){
hasDataLf = true;
return false;
}
});
$lostTableInput.toggleClass('R', hasDataLf);
// this above part works for changing the class, and below is my attempt at changing
// it back if the user deletes the data that was entered in.
$lostTableInput.each(function(){
if($(this).val().length == 0) {
$lostTableInput.removeClass('R');
}
}
)
}
);
答案 0 :(得分:3)
你可以简化一下......
var $inputs = $('#lostTable :input').not(':hidden');
$inputs.change(function(){
$(this).toggleClass('dummy', $(this).val().length > 0);
$inputs.toggleClass('R', $inputs.filter('.dummy').length > 0);
});
您可能需要查看delegate jquery方法,以获得更好的性能。对于虚拟类,你可能想要一个比“虚拟”更好的名字;)
答案 1 :(得分:1)
没有理由通过所有的价值观。您正在寻找一个输入的更改:
$('#lostTable input').change(function() {
var $lostTableInput = $('#lostTable input').not(':hidden');
if (this.value.length > 0) {
$lostTableInput.toggleClass('R', true);
}
else if (this.value.length == 0 || this.value == null) {
var found_one = false;
$lostTableInput.each(function(index, item) {
if (item.value.length > 0) {
found_one = true;
return false;
}
})
if (!found_one) {
$lostTableInput.removeClass('R');
}
}
})
答案 2 :(得分:0)
你为什么不这样做:
if(!hasDataLf){ // if every field is empty this should have remained false
$lostTableInput.removeClass('R');
}
答案 3 :(得分:0)
可能是比较器,试试:
if ($(this).val() == null)
{
$lostTableInput.removeClass('R');
}