我希望浏览器在执行某些操作后执行默认行为。我使用了even.preventDefault()并返回。但是“返回点击”事件没有执行默认的浏览器行为吗?



var doneStuff = false;

$('a').on('click', function(event) {

    if(doneStuff){
  	alert('done');
        doneStuff = false;
        return;
    }

    event.preventDefault();
    alert('doning stuff');
    doneStuff = true;
    $(this).trigger('click');
});

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="https://concypt.com">Some Link</a>

最佳答案

Return正在执行默认的浏览器行为。
这里的问题是$(this).trigger('click')
不幸的是,这仅触发通过jQuery注册的点击事件处理程序(而不是本机js dom事件)。
因此,您只应调用本机click方法:

var doneStuff = false;

$('a').on('click', function(event) {

    if(doneStuff){
        alert('done');
        doneStuff = false;
        return;
    }

    event.preventDefault();
    alert('doning stuff');
    doneStuff = true;
    this.click();
});


看看stackblitz

07-24 17:52