2011-03-15 33 views
0

快速預覽問題:使用.closest(),我可以在目標元素的所有實例上粘貼一個類屬性,但它不會插入在祖先DOM中有額外<div>的任何類別值。jQuery:.closest添加類屬性,但不是我預期的值

首先,這裏是jQuery的:

// Throw class="errorWrap" on any <li> element that contains a field that doesn't validate 
highlight: function(element) { 
    $(element).closest("li").addClass("errorWrap"); 
} 

(...... '標明:' 是的驗證插件......部分)

這是我的HTML的一個片段:

<li> 
    <div> 
     <span class="reqField">*</span> Have you been employed with us before?<br /> 
     <label class="radioInput"><input type="radio" name="app_prior_employ" value="Yes" /> Yes</label> 
     <label class="radioInput"><input type="radio" name="app_prior_employ" value="No" /> No</label> 
    </div> 

    <div> 
     <label for="app_prior_employ_date">If <em>yes</em>, when were you employed?</label><br /> 
     <input type="text" name="app_prior_employ_date" value="" size="40" id="app_prior_employ_date" /> 
    </div> 
</li> 

...現在,隨着上述,類屬性被添加到開幕<li>標籤時,它應該,但它的價值將是而不是errorWrap

正如我在這個問題上面提到的,只有那些在混合的<div>元素情況下,會出現此問題(如他們立即在上面做)。這個問題發生在其他情況下,其中<div>不到位,如:

<li> 
    <span class="reqField">*</span> Can you travel if a job requires it?<br /> 
    <label class="radioInput"><input type="radio" name="app_travel_for_job" value="Yes" /> Yes</label> 
    <label class="radioInput"><input type="radio" name="app_travel_for_job" value="No" /> No</label> 
</li> 

我想不通爲什麼會的jQuery在到處添加類屬性我希望它成功,但無法將我只定義的值插入DOM中具有額外元素的值中。我是否正確使用.closest()

新增片刻之後:這裏的問題的標記的截屏:http://i.stack.imgur.com/aiiaX.png

+0

應該沒問題。請創建一個演示您的問題的http://jsfiddle.net示例。 – 2011-03-15 12:48:52

+0

如果你用'.parents('li')'做了那個怎麼辦? – 2011-03-15 12:50:54

+0

奇怪的是,如果我使用.parents('li'),其結果相同。 – 2011-03-15 13:22:30

回答

1

您使用最接近()正確,但也許上下文中在那種情況下,highlight()函數是錯誤的。在腳本檢查器中,在高亮函數內部放置一個斷點,並查看元素是否實際上是您認爲的輸入。

另外,你說李有一個類,但沒有價值時,div在混合。也許班級正在設置,然後立即取消設置。使用腳本檢查器並設置斷點將幫助您弄清楚。

+0

Validate插件返回元素作爲第一個參數。所以它應該與父母一起工作('li')' – 2011-03-15 13:07:35

+0

我肯定需要在所有事情上對自己進行一點關於斷點/螢火蟲等的教育。我可以像嚮導一樣檢查HTML/CSS,但我不知道我在腳本區域中做了什麼。 – 2011-03-15 13:24:44

+0

我剛剛確認這個問題確實是你的第二個建議:類的值設置正確,但它也被立即取消設置。它看起來好像* unhighlight *(剝離類,只應該在字段驗證時運行)正在馬上運行。 – 2011-03-15 14:03:00

0

使用的父母,而不是

$(element).parents("li").addClass("errorWrap"); 
+0

相同確切的結果,奇怪的是,如果我使用.parents('li')。 (另外,如果需要,我添加了一個幫助屏幕截圖:http://i.imgur.com/aiiaX.png) – 2011-03-15 13:23:15