2016-09-19 8 views
0

в моем текущем проекте я иметь несколько строку:.on() из for loop?

$$(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 (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 селекторов, вы можете сгенерировать селектор, используя цикл.

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 (','); ' –