Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery-触发器(“单击”)在e.preventDefault()之后不工作_Javascript_Jquery - Fatal编程技术网

Javascript jQuery-触发器(“单击”)在e.preventDefault()之后不工作

Javascript jQuery-触发器(“单击”)在e.preventDefault()之后不工作,javascript,jquery,Javascript,Jquery,我正试图在浏览器将用户重定向到之前执行异步操作http://example.com单击即可 因此,在ajax调用之后,我再次单击currentTarget以重定向,但它不起作用 $(“.notice_click”)。在(“click”上,函数(e,选项){ 选项=选项| |{}; //如果它还没有被点击 //运行这个 如果(!options.has已单击){ e、 预防默认值(); const self=这个; //其他代码 $.get(”http://example.com/hello")

我正试图在浏览器将用户重定向到
之前执行异步操作http://example.com
单击即可

因此,在ajax调用之后,我再次单击currentTarget以重定向,但它不起作用


$(“.notice_click”)。在(“click”上,函数(e,选项){
选项=选项| |{};
//如果它还没有被点击
//运行这个
如果(!options.has已单击){
e、 预防默认值();
const self=这个;
//其他代码
$.get(”http://example.com/hello")
.always(函数(){
$(self.trigger(“click”,{hascacked:true});
});
}否则{
//我到了这里,这意味着e.preventDefault没有被调用,它应该重定向
log(“应该重定向但不重定向”);
}
});
我在触发前尝试了
$(self).off()
,但没有成功

我已经试过了:

window.location.assign(e.target.href);
这是有效的。但我很好奇是什么原因导致上述方法不起作用


浏览器:Mozilla Firefox(78.0.2)

您的代码在中运行正常。也就是说,更好的方法是始终调用
preventDefault()
停止页面重定向,然后发出异步AJAX请求。当该请求完成后,您可以使用
window.location.assign()
重定向用户

$(“.notice_click”)。在(“click”,e=>{
e、 预防默认值();
//我建议在这里的UI中放置一个加载微调器,以使其更清晰
//向用户发送他们的请求正在处理中。
$.get(”http://example.com/hello)始终(()=>{
window.location.assign(e.target.href);
});
});
试试这个:

$(".notic_click").on("click", function(e) {

  if( e.isTrusted) {
    e.preventDefault();

    const self = this;

    // some other code

    $.get("http://example.com/hello")
      .always(function() {
        $(self).click();
      });
  } else {
    // I got here, that means e.preventDefault didn't get called and it should redirect
    console.log("should redirect but not redirecting");
  }
});

您可以在此处阅读有关“值得信任”的更多信息:

使用此代码段进行尝试。您的代码中似乎存在逻辑问题。由于您阻止了默认行为,您应该“返回”到默认行为:

<a class="notic_click" href="http://example.com">Button</a>
<a class="notic_click" href="http://example.com">Button</a>


    <script>
        $(".notic_click").on("click", async function (e, options) {
            options = options || {};

            e.preventDefault();

            console.log('do task here');
            await new Promise(resolve => setTimeout(resolve, 3000));
            console.log('timeout end');
            await new Promise(resolve => setTimeout(resolve, 3000));

            window.location = this.href;
        });
    </script>

$(“.notic_click”)。在(“click”上,异步函数(e,选项){
选项=选项| |{};
e、 预防默认值();
log('do task here');
等待新的承诺(resolve=>setTimeout(resolve,3000));
log('timeout end');
等待新的承诺(resolve=>setTimeout(resolve,3000));
window.location=this.href;
});

我已经试过了,效果不错。但是,我正在试图理解问题中的代码有什么问题。您问题中的代码似乎工作正常:。你能检查控制台有没有错误。它能在小提琴里面重定向按钮预览的位置吗??因为在我的情况下,它不起作用确定: