.on()来自for循环?

时间:2016-09-19 16:35:35

标签: 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');
});

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

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

1 个答案:

答案 0 :(得分:6)

不需要循环使用comma separated multiple selectors

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

<小时/> 仅供参考:使用公共类来组合元素并使用类名附加事件处理程序总是更好。

如果有n个选择器,则可以使用for循环生成选择器。

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

ES6替代品

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

另一个选项是attribute start with selector,但它会选择idx开头的所有元素。

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