我可以在change()函数中为同一个$('element.class')运行一个$('element.class')。each()函数吗?

时间:2012-02-06 19:58:55

标签: javascript jquery dhtml

具体来说,我想迭代页面上的每个元素,每次更改一个值。

所以我要解释一下我的代码:

$('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 个答案:

答案 0 :(得分:1)

您可以这样做,但将单独的事件处理程序附加到许多元素并不是最佳选择。您可以利用事件冒泡并将单个处理程序附加到其父容器。例如:

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

答案 1 :(得分:1)

答案:是的,你可以。我最近做了很多这样的事情。实际上,您的代码应该这样做。您可能在代码中发现了一些小而重要的错误,需要将其删除并修复。我最近也做了很多像这样的东西

更有帮助的答案:做一些事情来弄清楚故障的位置。替换“$('select.filterbox')。each()”调用明显的东西 - 比如说,在页面的大块上调用.hide()。确保甚至调用了代码行。如果正在调用它,则将“$('select.filterbox')。each()”回调,然后在其中移动hide()调用。如果有效,那么你知道它至少运行一次。将hide()调用更改为(this).hide(),看看是否可以看到它被识别出来的那个。一旦你缩小了失败的地方,弄清楚你做错了什么就容易多了。