.each () останавливается после одного обращения? - PullRequest
1 голос
/ 20 апреля 2011

Такой простой вопрос, но я не могу понять его ...

function pageLoad() {
    runDatepickers();
    $("#btnSubmit").click(function () {
        $('span[id^="rfv"]').css("display", "block");
        alert("Submit was clicked");
        $('span[id^="rfv"]').each(function () {
            alert($(this).attr("id"));
            if ($(this).css("display") = "inline") {
                alert("display is inline");
                $(this).css("display", "block");
            }
        });
    });
};

Это останавливается после одной итерации, у меня есть несколько пролетов на странице, которые начинаются с "rfv"Первое утверждение $('span[id^="rfv"]').css("display", "block"); правильно выбирает и изменяет отображение всех этих элементов, но, согласно моим предупреждениям, когда я вхожу в каждый из них, он соответствует только первому элементу, и это все.Что мне здесь не хватает ??

Ответы [ 2 ]

5 голосов
/ 21 апреля 2011

Правильность: изменить

if ($(this).css("display") = "inline")

на

if ($(this).css("display") === "inline")

Производительность: кэшировать селекторы jQuery, где это необходимо.

Краткость : используйте тот факт, что .css() может использовать функцию в качестве второго аргумента.


function pageLoad() {
    runDatepickers();
    $("#btnSubmit").click(function () {
        $('span[id^="rfv"]').css("display", function (i, display) {
            return display === "inline" ? "block" : display;
        });
    });
};

Эпилог: пожалуйста, о пожалуйста не используйте alert() для отладки.Используйте настоящий отладчик.

3 голосов
/ 21 апреля 2011
if ($(this).css("display") = "inline") {

Измените = на ===

= - оператор присваивания, где === - неконвертирующий оператор равенства

...