当第一个函数完成W / O回调参数时,执行第二个函数

时间:2016-02-16 20:27:48

标签: javascript jquery html css events

背景:我正在通过VWO为网站运行A / B测试。我可以编写一个在页面加载时运行的脚本,但我无法访问任何网站的预先存在的脚本或以任何方式更改其代码,除了JS中的“覆盖”(例如删除div,更改CSS属性,附加div)页面加载。

问题:页面加载时,空<div id="priceinfo"></div>。在页面的其他地方,有一个<a href="javascript:RequestPriceInfo()" id="requestPrice"><img ...></a>。在RequestPriceInfo()内,该函数根据页面上的某些表单字段值将HTML输出到div#priceinfo。它还附加一个“订单”按钮(实际上它根本不是一个按钮,而是一个嵌套在锚标签中的图像)。我正在尝试使用JQuery的attr()函数更改“按钮”图像的来源。

进展:无。我已经尝试使用$('a#requestPrice').click(function() {...} );,但它无法更改图像的来源,我认为是因为当单击a#requestPrice并且我的函数运行时,内容尚未立即加载到页面上。我需要一种方法来判断RequestPriceInfo()何时被触发并完成,但RequestPriceInfo()上没有回调参数,我无法访问脚本来更改它并添加一个。

潜在有用的信息:有一个变量priceRequested,当RequestPriceInfo()运行时,变量从false变为true。虽然我没有意识到这个解决方案会变得优雅,但使用Object.prototype.watch()来监控变量似乎是不合理的,但我的想法已经不多了。

如何在不编辑添加回调参数的功能的情况下检测RequestPriceInfo()何时完成执行我的功能?

2 个答案:

答案 0 :(得分:1)

这是单程

var oldRequestPrice = RequestPriceInfo;
RequestPriceInfo = function(){
  oldRequestPrice();
  // Function completed, handle here
}

修改

由于问题似乎暗示RequestPriceInfo是异步API调用,请查看此问题:Add a "hook" to all AJAX requests on a page

这将跟踪页面上发生的所有Ajax请求。你可以选择你需要的那个,并在成功时激活你的功能/代码。

答案 1 :(得分:1)

使用CSS怎么样...你的脚本可以向<div id="priceinfo"></div>添加一个类,就像<div id="priceinfo" class="newButton"></div>一样。然后,在CSS中,您将隐藏#priceInfo.newButton的img并将新图像作为锚点的背景图像插入。