2016-07-24 2 views
-2

У меня есть два элемента <select>: select.exerciseType и #moduleTopic, каждый со своим собственным обработчиком, обернутым вокруг document. Я считаю, что важно знать, что select.exerciseType является динамичным, и их может быть несколько. Их события:JQuery при смене события для неправильного элемента

$(document).ready(function() { 
    $(document).on("change", $("select.exerciseType"), function(e) { 
     <!--Code not really important--> 
    } 
    $(document).on("change", $("#moduleTopic"), function(e) { 
     <!--Code not really important--> 
    } 
} 

Моя проблема, когда я изменить выбранный параметр в одном из этих выбирает, как эти события стрельбы. Почему селектор функции on() не работает и как я могу заставить его работать?

+2

Второй параметр должен быть строкой не коллекция JQuery. – undefined

ответ

2

Синтаксис для jQuery .on handler является .on(events [, selector ] [, data ], handler) где второй аргумент string

В вашем случае, как это не string, она опущена и event всегда срабатывает, когда он достигнет выбранного элемента!

$(document).ready(function() { 
    $(document).on("change", "select.exerciseType", function(e) {}); 
    $(document).on("change", "#moduleTopic", function(e) {}); 
}); 
+1

О, спасибо, это все. –

0

Вы можете использовать этот код вместо:

$("#moduleTopic").change(function() { 
// code executes here 
}); 

EDIT ---

Вы можете использовать имя класса и обнаружить <select> изменяется за счет использования $(this) внутри вашей функции.

+0

Btw, * Я считаю, что важно знать, что select.exerciseType является динамическим и может быть несколько из них *, видел это? – nicael

+0

TL; DR - Похоже, проблема заключалась в части $ (document), хотя мои ответы на адреса ** ТОЛЬКО ** это .. Я думаю, что я обращаюсь к методу обнаружения изменений только. Я переключился на ID, а не на класс, потому что непонятно из оригинального вопроса, как динамически созданные элементы могут быть сгенерированы так, чтобы быть уникальными .. – Toby

+0

Такие обработчики не работают с динамически добавленными элементами. – nicael

0

Вам не требуется document.ready, и вы также просто указываете селектор, а не извлекаете его. т.е.

$(document).on("change", "select.exerciseType", function(e) { 
    <!--Code not really important--> 
} 
$(document).on("change", "#moduleTopic", function(e) { 
    <!--Code not really important--> 
} 
Смежные вопросы