Функции переключения Jquery - PullRequest
1 голос
/ 05 апреля 2010

У меня есть код для сортировки таблицы с использованием Jquery. Я использую функцию переключения для чередования щелчков и переключения между сортировкой по возрастанию и убыванию. После того, как вы щелкнете таблицу заголовка, она должна отсортировать ее содержимое.

Однако есть ошибка:

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

Переключатель должен переключать функции одним кликом, а не двойным, я прав?

Вот код:

 firstRow.toggle(function() {
        $(this).find("th:first").removeClass("ascendFirst").addClass("descendFirst");
        $(this).find("th:not(first)").removeClass("ascend").addClass("descend");

        sorted = $.makeArray($("td:eq(0)", "tr")).sort().reverse();
        sorted2 = $.makeArray($("td:eq(1)", "tr")).sort().reverse();
        sorted3 = $.makeArray($("td:eq(2)", "tr")).sort().reverse();

        for (var i = 0; i < sorted.length; i++) {
            $("td", "tr:eq(" + (i + 1) + ")").remove();
            $("tr:eq(" + (i + 1) + ")").append($("<td></td>").text($(sorted[i]).text()));


            $("tr:eq(" + (i + 1) + ")").append($("<td></td>").text($(sorted2[i]).text()));


            $("tr:eq(" + (i + 1) + ")").append($("<td></td>").text($(sorted3[i]).text()));

        }
    }, function() {
        $(this).find("th:first").removeClass("descendFirst").addClass("ascendFirst");
        $(this).find("th:not(first)").removeClass("descend").addClass("ascend");

        sorted = $.makeArray($("td:eq(0)", "tr")).sort();
        sorted2 = $.makeArray($("td:eq(1)", "tr")).sort();
        sorted3 = $.makeArray($("td:eq(2)", "tr")).sort();

        for (var i = 0; i < sorted.length; i++) {
            $("td", "tr:eq(" + (i + 1) + ")").remove();
            $("tr:eq(" + (i + 1) + ")").append($("<td></td>").text($(sorted[i]).text()));


            $("tr:eq(" + (i + 1) + ")").append($("<td></td>").text($(sorted2[i]).text()));


            $("tr:eq(" + (i + 1) + ")").append($("<td></td>").text($(sorted3[i]).text()));

        }
    });

Ответы [ 2 ]

1 голос
/ 05 апреля 2010

Ваш код переключения выглядит нормально. Когда у меня возникла ситуация, когда для срабатывания события требуется второй щелчок, это был случай, когда я дважды применил переключатель к селектору (в данном случае firstRow ). Или что существует более одного объекта jQuery.

Убедитесь, что вы не применили его дважды, или присоедините свой код к простому div , чтобы проверить, работает ли он независимо от селектора firstRow . например:

 $("div.testclass").toggle(function() {
    // do this
    }
}, function() {
   // undo this
    }
});​

Возможно, нам также понадобится просмотреть ваш HTML.

0 голосов
/ 05 апреля 2010

Из вашего поста кажется, что все будет вести себя так, как вы ожидали, если бы вы ждали дольше между первым и вторым кликом. Функция двойного щелчка может съесть ваш второй щелчок, если вы сделаете это слишком рано. В этом случае свяжите этот обработчик с событиями click и double-click, а затем обработайте их, как если бы они были одним и тем же событием.

...