2011-11-18 86 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