Могу ли я запустить вложение функции $ ('element.class'). Each () внутри функции change () для того же $ ('element.class')? - PullRequest
1 голос
/ 06 февраля 2012

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

Итак, чтобы перефразировать мой код, у меня есть:

$('select.filterbox').change(function() {
  // stuff
  $('select.filterbox').each(function() {
    // other stuff
  });
});

'stuff'все выполняется просто отлично, но «прочее» не происходит

Вот полный код

        // On Filterbox Change
    $j('select.filterbox').change(function() {

        // Show All Rows
        $j('#table1 tr').show();

        // For Each Filterbox
        $j('select.filterbox').each(function() {

            var selVal = $j(this).attr('value');
            var col = $j(this).closest('th').parent().children().index($j(this).closest('th'));
            alert('Column '+val+' : '+selVal);

            // If Selected Value Not Empty
            if(selVal != "") {

                // For Each Row
                $j('#table1 tr').each(function() {
                    var $tds = $j(this).find('td');
                    var cellVal = $tds.eq(col).text();
                    cellVal = $j.trim(cellVal);

                    // If td text != selected
                    if( cellVal != selVal ) {

                        // Hide this row
                        $j(this).hide();
                    }
                });
            }
        });
    });

Ответы [ 2 ]

1 голос
/ 07 февраля 2012

Ответ: да, вы можете. Я сделал много подобных вещей в последнее время. Действительно, ваш код должен это делать. Вероятно, вы допустили небольшую, но существенную ошибку в своем коде, которую нужно будет найти и исправить. Я недавно сделал много таких вещей, как , которые тоже.

Более полезный ответ: делайте вещи, чтобы выяснить, где разбивка. замените вызов «$ ('select.filterbox'). each ()» чем-то очевидным - скажем, вызовом .hide () для больших кусков вашей страницы. Убедитесь, что строка кода даже вызывается. Если он вызывается, поместите обратный вызов «$ ('select.filterbox'). Each ()», затем переместите вызов hide () внутрь него. Если это работает, то вы знаете, что он работает хотя бы один раз. Измените вызов hide () на (this) .hide () и посмотрите, сможете ли вы увидеть, какой из них идентифицирован. После того, как вы сузили кругозор, вам будет намного легче понять, что вы сделали неправильно.

1 голос
/ 07 февраля 2012

Вы можете сделать это, но не оптимально добавлять отдельные обработчики событий ко многим элементам.Вы можете воспользоваться всплывающими событиями и просто прикрепить один обработчик к их родительскому контейнеру.Например:

$("#filters").change(function (evt) {
    // evt.target will give you actual element that changed
    $("#filters select.filterbox").each(function () {
        // other stuff
    });
});
...