Используйте jQuery для предотвращения функции щелчка элемента <a> на основе родительского элемента <li> с классом

0

Я пытаюсь предотвратить действие щелчка по умолчанию в пункте меню в WordPress. Я могу добавить класс noclick к элементу меню, но класс находится в элементе -li-.

<li class="noclick"><a href="http://google.com">Google</a></li>

Моя первая попытка:

<script type='text/javascript'>
    $('.noclick').click(function(e) {
        e.preventDefault();
    });
</script>

Затем я понял, что мне нужно настроить элемент -a, и я не уверен, как это сделать. Любая помощь приветствуется.

  • 0
    это должно просто отлично работать
Теги:

4 ответа

2
Лучший ответ

Элемент LI не имеет действия по умолчанию, когда вы его нажимаете, якорь имеет

$('.noclick a').click(function(e) {
    e.preventDefault();
});

И Wordpress использует режим noConflict по умолчанию, что означает, что $ undefined, поэтому

jQuery(function($) {
    $('.noclick a').click(function(e) {
        e.preventDefault();
    });
});
  • 0
    Я не думаю, что это точно, вы можете предотвратить действие по умолчанию от распространяемого обработчика также
  • 0
    Единственная проблема, которую я вижу, состоит в том, что код не находится внутри обработчика, готового к DOM .... или необходимо использовать делегирование событий
Показать ещё 8 комментариев
2

Единственная проблема, которую я вижу, это то, что ваш код не находится внутри обработчика dom

jQuery(function ($) {
    $('.noclick').click(function (e) {
        e.preventDefault();
    });
})

Событие click от элемента a будет передано в элемент li чтобы вы могли зарегистрировать обработчик для элемента li а затем вызвать preventDefault() в этом mehtod

0

Убедитесь, что область действия безопасна для использования функции $, например:

jQuery(function($) {
   ...
});

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

$(".noclick>a[href*='http://google.com']")

или

$(".noclick a[href*='google.com']")

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

jQuery(function($) {
    if($(".noclick>a[href*='http://google.com']").length>1){
        $(".noclick>a[href*='http://google.com']")[0].onclick = function(){
            return false;
        }
    }
    else{
        //it means there is something wrong with your query
    }

});

это отключит все действия, даже если они будут проигнорированы, если вы сделаете это, используя jQuery e.preventDefault();

0

почему нет:

<script type='text/javascript'>
    $('.noclick a').click(function(e) {
        e.preventDefault();
    });
</script>

это будет нацелено a элементы, которые являются дочерними элементами с классом noclick

Ещё вопросы

Сообщество Overcoder
Наверх
Меню