延迟事件处理程序,直到完成另一个功能

时间:2018-11-15 09:37:27

标签: javascript jquery ajax

我们最近在我们的网站上实现了第三方解决方案,对此我无法直接更新代码,但可以添加自己的JavaScript进行操作。该解决方案具有一个按钮,该按钮触发AJAX请求。我想在提交AJAX请求之前运行自己的一些自定义代码,并且仅在我的代码允许的情况下提交它。

在我自己的函数覆盖绑定之前,是否有办法将按钮的click事件处理程序存储在变量或其他函数中,一旦我的操作完成,该绑定将触发原始的事件处理函数?

希望很清楚...

编辑: 这样,点击处理程序就被添加到了第三方解决方案中,确实相当标准。但是,我无法直接访问所使用的控制器,因此不能仅复制该函数。另外,服务提供商有时会更新其代码,因此,如果我复制了代码,则他们在更新代码时也不会更新。

enter image description here

1 个答案:

答案 0 :(得分:0)

  

此解决方案具有一个按钮,该按钮触发AJAX请求。我想在提交AJAX请求之前运行自己的一些自定义代码,并且仅在我的代码允许的情况下提交它。

无需深入研究jQuery的事件处理程序管理内部(可以随时更改),可能最简单的方法是隐藏按钮并用您自己的按钮替换,然后在适当时触发按钮。查看评论:

class something {
  constructor() {
    this.brands = [];
  }
  getRemoteBrands() {
    var instance = {
      label: element.brand,
      value : element.brand    
    };
    this.brands.push(instance);
  }
}
// === The original handler
$("#the-btn").on("click", function() {
  console.log("Original handler ran");
});

// === Your code
// Get and hide the original button
var btn = $("#the-btn");
btn.hide();
// Create and add replacement
var newBtn = $("<input type=button>"); newBtn.val(btn.val());
newBtn.on("click", function() {
  console.log("Your handler starting (I'm assuming an async process)...");
  setTimeout(function() {
    console.log("Your handler is done, triggering original");
    btn.click();
  }, 800);
});
newBtn.insertBefore(btn);