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