Как предотвратить щелчки на указанных элементах внутри тега <a>, которые не имеют ссылок?

0

У меня есть часть HTML, как:

<a href="http://site.com">
  <span id="a">Click here to link to site.com</span>
  <span id="b">Click here not to link to site.com</span>
</a>

Не меняя структуру DOM, просто используя JavaScript, как я могу запретить привязку span#b от ссылки на сайт.com при нажатии?

Я использую jQuery в этом проекте, поэтому лучше реализовать его с помощью jQuery.

Благодаря,

Обновить:

Извините, я нашел ответы, которые return false или .stopPropagation() не работает в конкретной ситуации. Поэтому я добавил более подробную информацию:

Это дерево DOM, жаль, что мне нужно скрыть некоторые личные данные:

Изображение 174551

Вот связанный код:

$('.span_wrapper').click(function(e){
  e.stopPropagation();
  alert('clicked');
  return false;
});

Он по-прежнему ссылается на страницу на значение href внешнего тега <a>.

Обновление: вот видео, объясняющее, что я пытался:

https://www.facebook.com/photo.php?v=10201864154343615

Теги:

3 ответа

6

Просто запретите событие размножаться /#b элемента #b до элемента <a>:

$('#b').on('click', function(e) {
    e.preventDefault();
    // any other code to react to this click here
});

Там также сокращенная версия для достижения того же самого (если у вас нет другой логики):

$('#b').on('click', false);

Из документов:

Значение false также допускается как сокращение для функции, которая просто return false.

Вызов return false из обработчика события jQuery является эквивалентом вызова как event.stopPropagation() и event.preventDefault(). Преимущество вызова e.preventDefault() в начале функции состоит в том, что он все равно будет препятствовать соблюдению ссылки, даже если есть ошибки, вызванные выполнением остальной функции обработчика.

ПРИМЕЧАНИЕ. Как всегда при работе с элементами вам необходимо убедиться, что они действительно существуют, прежде чем пытаться это сделать. Это либо означает готовый обработчик DOM, либо перемещает сценарий в конец HTML-документа непосредственно перед </body>.

  • 0
    Не работает ......... @ Энтони Грист
  • 0
    @DineshKanivu Работает для меня: jsfiddle.net/29hdV Я добавил примечание о том, что элементы действительно существуют, прежде чем работать с ними, если он не работает для вас, то, скорее всего, это так (или вы сделали что-то еще не так).
Показать ещё 12 комментариев
1

что-то вроде этого будет работать, я думаю

$("a #b").click(function(){return false});
  • 0
    Спасибо за ответ, но он не работает, не могли бы вы взглянуть на мой обновленный вопрос?
  • 0
    @Aw Qirui Guo Привет, это хорошо работает для меня. Должно быть что-то еще в вашем коде.
0

Остановить распространение, связанное с событием click чтобы span#b

$('#b').click(function(e) {
   e.stopPropagation();
   return false;
});

Ещё вопросы

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