.on()来自for循环?

t33*_*33o 0 javascript jquery

在我目前的项目中,我有这样的多行:

$$(document).on('change','#x1', function () {
   console.log('fired');
});
$$(document).on('change','#x2', function () {
   console.log('fired');
});
$$(document).on('change','#x3', function () {
   console.log('fired');
});
Run Code Online (Sandbox Code Playgroud)

是否有可能用一些for循环替换它?(我的例子不起作用)

for (var i = 1; i < 4; i++) {
   $$(document).on('change','#x'+i, function () {
   });
}
Run Code Online (Sandbox Code Playgroud)

Pra*_*lan 6

不需要循环使用逗号分隔的多个选择器.

$$(document).on('change','#x1,#x2,#x3', function () {
   console.log('fired');
});
Run Code Online (Sandbox Code Playgroud)


仅供参考: 总是最好使用公共类来组合元素并使用类名附加事件处理程序.


如果有n个选择器,那么您可以使用for循环生成选择器.

var sel = '';
for (var i = 1; i < 4; i++) {
   sel += (i > 1? ',' : '') + '#x' + i;
}
Run Code Online (Sandbox Code Playgroud)

ES6替代品

var sel = Array.from({ length:3 },(_, i) => '#x' + (i + 1)).join(',');
Run Code Online (Sandbox Code Playgroud)

另一种选择是属性入手选择,但它会选择所有元素在那里它id是开始x.

$$(document).on('change','[id^="x"]', function () {
   console.log('fired');
});
Run Code Online (Sandbox Code Playgroud)