jQuery: .closest добавляет атрибут класса, но не мое предполагаемое значение - PullRequest
0 голосов
/ 15 марта 2011

Быстрый предварительный просмотр проблемы: используя .closest(), я могу прикрепить атрибут класса ко всем экземплярам целевого элемента, но он не вставит значение класса для любого, у которого есть дополнительный <div> в предок ДОМ.

Во-первых, вот 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>

… теперь, с учетом вышесказанного, атрибут класса будет добавлен к открывающему тегу <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

Ответы [ 2 ]

1 голос
/ 15 марта 2011

Вы используете closest () правильно, но, возможно, контекст, в котором функция highlight () является неправильной в этом случае. В инспекторе сценариев поместите точку останова в функцию выделения и посмотрите, действительно ли элемент является вводом, о котором вы думаете.

В качестве альтернативы вы говорите, что у li есть класс, но нет значения, когда div находится в миксе. Может быть, класс устанавливается, а затем сразу отключается. Использование инспектора сценариев и установка точек останова помогут вам понять это.

0 голосов
/ 15 марта 2011

Используйте родителей вместо

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