我们最近在我们的网站上实现了第三方解决方案,对此我无法直接更新代码,但可以添加自己的JavaScript进行操作。该解决方案具有一个按钮,该按钮触发AJAX请求。我想在提交AJAX请求之前运行自己的一些自定义代码,并且仅在我的代码允许的情况下提交它。
在我自己的函数覆盖绑定之前,是否有办法将按钮的click事件处理程序存储在变量或其他函数中,一旦我的操作完成,该绑定将触发原始的事件处理函数?
希望很清楚...
编辑: 这样,点击处理程序就被添加到了第三方解决方案中,确实相当标准。但是,我无法直接访问所使用的控制器,因此不能仅复制该函数。另外,服务提供商有时会更新其代码,因此,如果我复制了代码,则他们在更新代码时也不会更新。
答案 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);