在jQuery中添加和删除类

时间:2011-05-19 13:57:33

标签: javascript jquery

我有一个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'); 
    }
   }
  )
 }
);

4 个答案:

答案 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');
        }
    }
})

小提琴:http://jsfiddle.net/nYrqx/

答案 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'); }