2016-09-19 120 views
0

在我目前的项目我有多个行是这样的:.on()from for循环?

$$(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

我在这里看不到任何Ajax ... –

回答

6

无需环路使用comma separated multiple selectors的。

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


FYI:始终这是更好地使用通用类元素的组,并使用类名附加事件处理程序。


如果有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但它会选择所有元素,其中它的id是先从x

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

谢谢!也可以使用n #x创建此事件? – t333o

+0

@ t333o:使用循环生成选择器 –

+0

@ t333o:es6方法Array.from({length:3},( _,i)=>'#x'+(i + 1))。join ',');' –