Игнорировать функцию щелчка по таблице при нажатии на ссылку

#javascript #jquery

#javascript #jquery

Вопрос:

У меня есть метод щелчка, когда пользователь нажимает на строку в моей таблице.

 $('.table > tbody > tr').click(function () {
    if ($(this).hasClass("info")) {
        $(this).removeClass("info");
    }
    else {
        $(this).addClass("info");
    }
});
 

Однако в некоторых ячейках есть ссылки, если щелкнуть ссылку, я бы хотел проигнорировать описанный выше метод. Как я могу это сделать?

Ответ №1:

Просто проверьте, нажата ли ссылка с event.target помощью и .closest() :

 $('.table > tbody > tr').click(function (e) { //Catch event here
    if($(e.target).closest('a').length) return; // Add this
    if ($(this).hasClass("info")) {
        $(this).removeClass("info");
    }
    else {
        $(this).addClass("info");
    }
});
 

Комментарии:

1. Должно быть .is('a') ? Closest() будет перемещаться вверх по DOM, а структура не a > tr

2. @Johan Если внутри есть, например, промежуток a , .is() не будет работать, поскольку target будет промежуток.

3. @A.Wolff ВСЕ! … Нет, это не было проблемой, но, прочитав ваш комментарий, OP может быть заинтересован этой скрытой функцией!

4. Могу ли я узнать причину снижения? Просто любопытно, чтобы я мог улучшить свой ответ…

Ответ №2:

Вы можете остановить распространение события щелчка из привязки

 $('.table > tbody > tr a').click(function (e) { 
    e.stopPropagation()
});
 

http://jsfiddle.net/JkebH/