具体来说,每当一个元素的值发生变化时,我都想迭代页面上的每个元素。
因此,套用我的代码:
$('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
});
});