Подтвердить что ты не робот

JQuery использует .on() не с селектором

Я использую функцию .on() с этим синтаксисом:

$(".schemaTab").on("click", ".schema", function () {})

вместо .live(), потому что я добавляю .schema divs динамически. Эти divs имеют этот код:

<div class="schema" id="SCH_16">
   <img src="Img/btnRemove.png" class="ikona SCH_Remove" alt="Smazat" title="Smazat">
</div>

Но мне нужно исключить img из события click из его родительского div, поэтому любая идея, как это сделать?

Я пробовал:

$(".schemaTab").not(".SCH_Remove").on("click", ".schema", function () {})

... но это не сработало, и я не знаю, как добавить .not() в код .on()

4b9b3361

Ответ 1

.not() не будет работать, потому что метод on прикрепляет обработчики событий к выбранному в данный момент набору элементов в объекте jQuery и использует оригинальный селектор, чтобы проверить, должно ли оно применяться.

Итак, я считаю, что выбор, а затем фильтрация в вашем случае сделает трюк.

API: http://api.jquery.com/on/

вы можете попробовать следующее:

$(".schemaTab").on("click", ".schema", function (e) {

    if (!$(e.target).is(".schemaTab")) {
         // not stuff in here
    }

});

Ответ 2

На самом деле вы можете использовать селектор :not с методом .on, вот так.

Это более чистое решение, чем фильтрация результатов по ответу Tats_innit.

$('.schemaTab').on('click', '.schema:not(.booga)', function(event) {
  // Fun happens here
});

Я использую jQuery 1.11.0.

Ответ 3

Просто убедитесь, что цель соответствует:

$('.schemaTab').on('click', '.schema', function(e) {
    if(!$(e.target).is('.schema')) {
        return;
    }

    // Do stuff
});

Ответ 4

Все дело в том, чтобы обрабатывать события на элементах, еще не находящихся в DOM, включая ваш .sch_Remove.

$(".schemaTab").on("click", ".schema", function () {})

Чтобы предотвратить срабатывание родительского действия щелчка при щелчке на нем, добавьте следующее (помимо вашей функции выше).

$(".schemaTab").on("click", ".SCH_Remove", function () { return false; })

Это предотвратит распространение события 'click' родительскому элементу и запуск его метода onclick и предотвращение поведения кликов по умолчанию.