Как написать селекторную функцию в jQuery .siblings () - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь найти все родственные элементы, используя метод .siblings ([selector]). Хотя я не уверен, как должен быть написан метод селектора, или где я ошибаюсь с моим текущим методом селектора.

У меня есть HTML:

<div>
    <div>
        <label for="username">Username</label>
        <input class="username" type="text" placeholder="Username" id="username"/>
    </div>

    <div>
        <label for="Password">Password</label>
        <input class="password" type="password" placeholder="Password" id="password"/>
    </div>

    <div>
        <button id="login">Login</button>
    </div>
</div>

При нажатии кнопки, если поля имени пользователя или пароля не введены, я хочу добавить класс к незаполненным элементам. При нажатии кнопки запускается скрипт:

if (username not entered) {

    jQuery(this).parent('div').siblings(function (a) {
        if (a.children('input').length > 0 && a.children('input')[0].hasClass('username'))
            return true;
        else return false;
    }).addClass('input-empty');

}

Однако этот вызов jQuery возвращает как div, содержащий поле имени пользователя, так и div, содержащий поле пароля. Почему это возвращает поле пароля, если я указал, что оно должно содержать входной тег с классом 'username'?

1 Ответ

0 голосов
/ 08 июля 2019

Посмотрите на документацию :

.siblings( [selector ] )

Метод принимает один аргумент, который является необязательным, и является селектором.

1012 * Селектор *
Тип: Селектор
Строка, содержащая выражение селектора для сопоставления элементов с.

Если вы передаете селектор, это должна быть строка .

jQuery(this).parent('div').siblings(function (a) {

Вы передаете функцию , которая не является строкой.


Используйте :has() псевдо-класс для выбора элементов с конкретными потомками.

...