2012-03-22 49 views
0
$(':input[type=text], textarea').change(function(){ 
    if(($(":input[type=text]").val()!="") && $("textarea").val()!=""){ 
     $(":submit").removeAttr("disabled"); 
     $(":submit").removeClass("disabled"); 
     $(":submit").addClass("success"); 
    } 
}); 

当我在表单中的2个textarea元素中输入1个文本时,触发该函数。.change()

但我希望此功能在所有文本框和文本区域都不为空时被触发。

回答

1

你最好在你的元素中添加一个类来标识它们。加上它会使代码更语义:

<input type="text" name="Texbox1" class="elementGroup" /> 
<textarea name="Textarea1" class="elementGroup"></textarea> 
<textarea name="Textarea2" class="elementGroup"></textarea> 

然后在你的代码,你可以将你的活动,并检查是否所有的三个元素有一个值集:

$('.elementGroup').change(function() { 
    var valid = true; 
    $('.elementGroup').each(function() { 
     if ($(this).val() == "") 
      valid = false; 
    }); 

    if (valid) 
     $(":submit").removeAttr("disabled").toggleClass("disabled success"); 
}); 

Example fiddle

+1

'each()'中的'return false;'并不妨碍对$(“:submit”)执行的操作。 – Matt 2012-03-22 13:28:46

+0

@Matt你说得对,更新了代码和小提琴。 – 2012-03-22 13:33:19

-1

你需要通过inputstextareas迭代,以确保每一个不为空为-1缺少==(因为我猜

$('input[type=text], textarea').change(function(){ 
    x=0; 
    $('input[type=text], textarea').each(function(){ 
    if($(this).val()==''){x=1;} 
    }); 
    if(x==0){ 
    $(":submit").removeAttr("disabled"); 
    $(":submit").removeClass("disabled"); 
    $(":submit").addClass("success"); 
    } 
}); 

感谢究竟是干什么的被接受的答案的确如此。)

+0

'each()'中的'return false;'并不妨碍对$(“:submit”)执行的操作。 – Matt 2012-03-22 13:29:01

+0

真的吗?那么我猜想我不知道要去那里。我想,将它制作成国旗可能会更好。 – sparrow 2012-03-22 13:33:20