具体来说,我想迭代页面上的每个元素,每次更改一个值。
所以我要解释一下我的代码:
$('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();
}
});
}
});
});
答案 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(),看看是否可以看到它被识别出来的那个。一旦你缩小了失败的地方,弄清楚你做错了什么就容易多了。