В JQuery, как я могу избежать двух $ (this) селекторов, чтобы вызвать конфликт друг с другом как часть метода each ()? - PullRequest
2 голосов
/ 16 июня 2011

всех.

Я новичок в JQuery и пытаюсь сделать следующее: у меня есть элементы select и checkbox, и я хочу, чтобы определенные изменения происходили каждый раз, когда документзагружен или обновлен.Я имею в виду, что фон выбора должен отличаться в зависимости от того, выбран ли в данный момент пустой параметр (или приглашение) или нет.Кроме того, в зависимости от первого, (сопровождающий) флажок также должен быть включен или отключен (выбран пустой флажок => флажок отключен ИЛИ наоборот).

Теперь я не буду вводить какие-либо идентификаторы(из выбора или флажков) вручную.Вместо этого я хочу получить их все динамически, используя каждый метод на правильном селекторе.И вот тут возникает проблема.

Итак, допустим, мы получили это:

<select id="select_01"> 
<option value="">Whatever as prompt...</option> 
<option value="first">First option</option>
</select>

<input id="check_box_01" type="checkbox" />


<select id="select_02"> 
<option value="first" selected="selected">First option</option> 
<option value="">Whatever as prompt...</option> 
</select>

<input id="check_box_02" type="checkbox" />

и в сценарии я поставил это:

    $(document).ready(function() {
    $("select,:checkbox").each(function() {
        mySelectId = $("#" + $(this).attr("id"));
        myCheckboxId = $("#" + $(this).attr("id"));
        if (mySelectId.attr("value") === "") {
            mySelectId.css({
                "background": "grey"
            });
            myCheckboxId.attr("disabled", "disabled");
        }
    });
});

проблема, как вы можете видеть, заключается в том, что $ ("select,: checkbox"). каждый метод не способен определить, какой $ (this) представляет что (ну, это и мой собственный очевидный недостаток знаний для решения этой проблемы).

Если я опускаю один из селекторов, все работает хорошо, но (очевидно) это влияет только на селекторы или флажки, но не на оба.Нечто подобное работает (фон меняется, как и должно, но флажки остаются без изменений):

$(document).ready(function() {
    $("select").each(function() {
        mySelectId = $("#" + $(this).attr("id"));
        if (mySelectId.attr("value") === "") {
            mySelectId.css({
                "background": "grey"
            });
        }
    });
});

¿Могу ли я сделать mySelectId и myCheckboxId двумя разными, легко распознаваемыми переменными в рамках метода?Любая помощь будет оценена.Заранее спасибо!

Карлос Пардилья.

PD: (Я хотел сказать «Привет всем» сверху, но редактирование продолжает сокращать все приветствие - не знаю, почему)

Ответы [ 3 ]

1 голос
/ 16 июня 2011
if ( $(this).is("select") ) {
  mySelectId = $("#" + $(this).attr("id"));
}else if (( $(this).is(":checkbox") ) {
  myCheckboxId = $("#" + $(this).attr("id"));
}
1 голос
/ 16 июня 2011

Ну, наконец-то мне удалось заставить его работать благодаря вам обоим:

$(document).ready(function() {
    $("select, :checkbox").each(function() {
        if ($(this).is("select")) {
            mySelectId = $("#" + $(this).attr("id"));
            if (mySelectId.attr("value") === "") {
                mySelectId.css({
                    "background": "grey"
                });
            }
        } else if ($(this).is(":checkbox")) {
            myCheckboxId = $("#" + $(this).attr("id"));
            if (mySelectId.attr("value") === "") {
                myCheckboxId.attr("disabled", "disabled");
            }
        }
    });
});

Единственное, что меня не устраивает - это необходимость повторять if (mySelectId.attr("value") === "") {, (я стараюсь применять философию Rails по DRY, когда это возможно), но я уверен, что найду обходной путь.

Я считаю, что метод is () (с которым я раньше не был слишком знаком) может оказать большую помощь в таких ситуациях.

Не стесняйтесь возиться с этим, как вам будет угодно: http://jsfiddle.net/CarlosPF/DsHUp/

Большое спасибо вам обоим! Ваша помощь была неоценима.

Карлос Пардилья.

1 голос
/ 16 июня 2011

В вашем цикле функции each () вы не получаете элементы в виде пар.

Вы получаете их по одному.

Я бы сделал это в два этапа(две петли), одна для выбора, одна для флажков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...