0

问题的快速预览:使用.closest(),我可以在目标元素的所有实例上粘贴一个类属性,但它不会<div>在祖先 DOM 中具有额外属性的任何实例上插入类值。

首先,这是 jQuery:

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

(……“highlight:”是 Validate 插件的一部分……)

这是我的 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>

…现在,有了上面的内容,class 属性在应该添加到开始<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

4

2 回答 2

1

您正确使用了最接近(),但可能在该实例中 highlight() 函数的上下文是错误的。在脚本检查器中,在 highlight 函数中放置一个断点,然后查看 element 是否真的是您认为的输入。

或者,你说 li 有一个类,但当 div 混合时没有价值。也许课程正在设置然后立即取消。使用脚本检查器和设置断点将帮助您解决这个问题。

于 2011-03-15T13:00:09.973 回答
0

改用父母

$(element).parents("li").addClass("errorWrap");
于 2011-03-15T12:52:25.770 回答