2015-09-23 3 views
1

я работаю с массивом селекторов:связывают событие селекторов в массиве

var selectors = ['#first_name', '#last_name']; 

Я хочу, чтобы иметь возможность связать события, такие как focus, change, keyup и т.д. для каждого селектора в этом массиве. Селекторы подключаются к входам формы.

Для привязки каждого селектора у меня есть следующий код.

for(var selector in selectors){ 
    $('#form').find(selectors[selector]).on('change keyup click select focus', function(){ 
    console.log(selectors[selector]); //this is here for testing 
    }); 
} 

Это должно логически работать, но когда я прочитал консоль журнал он показывает #last_name дважды.

Я проверил форму снова и снова, и это не имеет никакого отношения к форме. Единственная проблема в моем коде - это единственная логическая структура, которую я предоставил. Если я консоль регистрирую массив перед циклом, он показывает массив как ['#first_name', '#last_name'], поэтому я так запутался.

+2

FWIW, вы можете присоединиться к селекторам в одну строку с запятой в качестве разделителя. –

ответ

1

Вы можете использовать селекторы, разделенные запятой, нет необходимости в цикле. Причина двойной стрельбы в консоли связана с одновременным запуском нескольких объектов, когда при нажатии на новый вход будет срабатывать клик и фокус в одно и то же время.

$('#form').find(selectors.join()).on('change keyup click select focus', function(){ 
    console.log(this); //this is here for testing 
}); 
+0

так что цикл for даже не нужен, это то, что вы говорите –

+0

@MarkHill: что нет необходимости в этом –

+0

ну, я просто попробовал ваше решение, и он отлично сработал, дайте мне немного, и я принимаем за ответ. Спасибо за быстрое решение! –

Смежные вопросы