Как я могу переопределить обработчик события jQuery селектора идентификатора с помощью селектора класса? - PullRequest
3 голосов
/ 25 января 2012

У меня есть обработчики событий щелчка для нескольких элементов с идентификаторами и селекторами классов:

$(function() {
    $("#cancelOrderLink").click(function() {
        if (confirm("If you continue, all items will be removed " +
            "from your cart. This action cannot be undone. Continue " +
            "and empty cart?"))
            $("form#clearCartForm").submit();
    });

    $(".updateItemLink").click(function(){
        $(this).closest("form").submit();
    })
});

Однако я хочу добавить логику, чтобы предотвратить запуск этих обработчиков, если элемент имеет определенное имя класса:

$(function() {
    $(".superUser").click(function() {
        $("#message").html("This action is not allowed when acting as a Super User.<br />");

        return false;
    });
});

Как переопределить обработчики в первом фрагменте вторым фрагментом?

Ответы [ 3 ]

1 голос
/ 25 января 2012

Вы можете использовать фильтр .not().

$(function() {
    $("#cancelOrderLink").not(".superUser").click(function() {
        if (confirm("If you continue, all items will be removed " +
            "from your cart. This action cannot be undone. Continue " +
            "and empty cart?"))
            $("form#clearCartForm").submit();
    });
});
1 голос
/ 25 января 2012

Добавьте event.stopPropagation(); к вашему коду:

$(".superUser").click(function(e) {
   e.stopPropagation();
   ...

В качестве альтернативы, если элементы равны, и у вас нет других click слушателей, отсоедините предыдущий метод:

$(".superUser").unbind('click').click(function() {

Если вы хотите связать события во время выполнения для определенных идентификаторов, но не для имени класса, используйте:

$("#cancelOrderLink").not('.superuser').click(function() {
0 голосов
/ 25 января 2012

Вместо e.stopPropagation () я бы предложил использовать «return false».Это более надежный способ остановить распространение и предотвратить дефолт.например:

$("#yourclass").click(function(){
return flase;
});
...