我可以在change()函数中为同一个$('element.class')运行嵌套的$('!ele

Can I run nest a $('element.class').each() function within the change() function for the same $('element.class')?

本文关键字:运行 class 嵌套 ele element 同一个 我可以 change 函数      更新时间:2023-09-26

具体来说,每当一个元素的值发生变化时,我都想迭代页面上的每个元素。

因此,套用我的代码:

$('select.filterbox').change(function() {
  // stuff
  $('select.filterbox').each(function() {
    // other 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();
                    }
                });
            }
        });
    });

回答:是的,你可以。我最近做了很多类似的事情。事实上,你的代码应该这样做。很可能你在代码中犯了一些小但重要的错误,需要查找并修复。我最近也做了很多类似的事情。

更有用的答案是:做一些事情来弄清楚故障在哪里。用一些明显的东西替换"$('select.filterbox').each()"调用,比如在页面的大块上调用.hide()。确保代码行被调用。如果正在调用它,请将"$('select.filterbox').each()"调用放回,然后将hide()调用移到其中。如果这样做有效,那么您就知道它至少运行了一次。将hide()调用更改为(this).hide(),看看是否可以看到它被标识为哪一个。一旦你缩小了让你失望的地方,你就会更容易弄清楚自己做错了什么。

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

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