2011-11-18 57 views
1

我有一个小问题,使用jQuery:jQuery的addclass错误

$('#form-submit').click(function() { 

    $('#textarea, #name').removeClass('error-state').addClass('normal-state'); 

    var myName = $('#name').val(); 
    var myContent = $('#textarea').val(); 

    if (myContent == '' || myName == '') 
    { 
     $('#textarea, #name').removeClass('normal-state').addClass('error-state'); 
     return false; 
    } 

    [more code here] 

}); 

此代码的工作好#textarea,但并不为#name,我已经检查并没有发现错误再重新检查。

但是,如果我们添加:

$('#name').val('some value'); 

之前return false;变化值,但CSS类仍然是相同的。

任何想法?

+0

什么都看不到你的代码不对。考虑创建一个http://jsfiddle.net/演示。 –

+0

向我们展示一些HTML,以便我们可以判断您的选择器是否存在问题。 – zzzzBov

+1

你能告诉我们“名称”的HTML吗? – devrooms

回答

1

尝试:

$('#form-submit').click(function() { 

    var arrJEls = $('#textarea, #name'); 

    arrJEls.each(function(i){ 
     //See what happens with each element: 
     console.log($(this)); 
     $(this).removeClass('error-state').addClass('normal-state'); 
    }); 

    var myName = $('#name').val(); 
    var myContent = $('#textarea').val(); 

    if (myContent == '' || myName == '') 
    { 
     arrJEls.each(function(i){ 
      //See what happens with each element: 
      console.log($(this)); 
      $(this).removeClass('normal-state').addClass('error-state'); 
     }); 
     return false; 
    } 

    [more code here] 

}); 
+1

jQuery的好处在于,您不必遍历每个元素来应用某个函数。如果OP的代码不起作用,这也不会。 –

+1

我不相信'.each()'函数是必须的,如果你在你的'arrJEls'变量上调用'.removeClass(...)。addClass(...)',它会影响到这两个元素。不过,将选择器缓存在一个变量中是一个好主意,因为它们可以被多次访问。 – Jasper

+0

我忘了在每个元素中添加console.log()。 – Galled

2

您的代码应该很好地工作 - http://jsfiddle.net/Zpxmr/

我希望你知道,ID是一次性使用,并且只适用于一个元素

+0

是的,我已经试过这个:console.info($('#name')。hasClass('error-state'));我在控制台上得到了TRUE,但css风格仍然没有渲染。 :( – greenbandit

+1

你有没有试过改变ID到别的?我怀疑ID命名为“名称”我的原因有时是一个问题 – Janis