jQuery:preventDefault()无法处理锚链接标记(尝试了很多方法!)

时间:2017-05-01 13:14:41

标签: javascript jquery html

我试图阻止锚链接发送到另一个页面,但它实际上并没有工作,我甚至不知道为什么。我之前使用过preventDefault,它每次都有效,但这次我不知道发生了什么。

是的我已经在stackoverflow上看到了这个问题并尝试了所有方法,但它仍然无效

HTML代码:

 <h2><a id="donta" href="/services.html">Eco Ideas</a></h2>

jQuery代码:

$('#donta').on('click', function(event) {
            event.preventDefault();
            event.stopPropagation();

            alert(event.target.tagName);    //yes it alerts me 'A'

            if(event.isDefaultPrevented()){

                    alert('Prevented!');    //yes it shows this alert but still send me to that link

                    event.stopImmediatePropagation();
                    event.returnValue = false;
                }else{

                    // NOPE, it doesn't show this "ELSE" part...means the below alert doesn't show up...means according to browser or jQuery it is now PREVENTED

                    alert('Not prevented but trying to prevent now');
                    event.returnValue = false;
                }
            return false;
});

你可以看到我尝试了所有的方法,但它仍然把它发送给那个该死的链接! 在此先感谢,因为我知道你们会找到一种方式:)

2 个答案:

答案 0 :(得分:1)

链接上有很多事件监听器。其中2人正在监听click事件。似乎只有一个人阻止了链接,而其他人则没有。

enter image description here

我认为麻烦可能出在这个函数中,因为它会触发:

function end(e) {
  clearTimeout(resetTimer);
  resetTimer = setTimeout(function() {
    w.tapHandling = false;
    cancel = false;
  }, 1000);

  // make sure no modifiers are present. thx http://www.jacklmoore.com/notes/click-events/
  if ((e.which && e.which > 1) || e.shiftKey || e.altKey || e.metaKey || e.ctrlKey) {
    return;
  }

  e.preventDefault();

  // this part prevents a double callback from touch and mouse on the same tap

  // if a scroll happened between touchstart and touchend
  if (cancel || w.tapHandling && w.tapHandling !== e.type) {
    cancel = false;
    return;
  }

  w.tapHandling = e.type;
  trigger(e);
}

答案 1 :(得分:0)

我通常不会将href属性设置为值,只是设置href="javascript:void(0)"时我不会重定向该链接并在该链接中设置操作。

也许也适合你。