我正在使用第三方应用,他们将一个JS变量硬编码到他们的HTML中,我需要使用Javascript或jQuery更改/更新,两者都可以使用。
第三方应用程序的变量已硬编码到页面中:
<script type="text/javascript" charset="utf-8">
var order_poNumber = "";
</script>
当用户从下拉列表中选择值时,会更新哪些内容(我的下拉列表,而不是第三方):
<script type="text/javascript" charset="utf-8">
var order_poNumber = "32380080-64060";
</script>
但问题在于价值因某种原因而存在。如果你转到另一个页面然后回来(不是使用后退按钮,而是通过转到另一个页面,然后单击链接返回发生此问题的订单页面)值仍然是设置为32380080-64060,但我需要它原来是空白的。
我试过了:
function resetPO(){
order_poNumber = "";
}
window.onload = resetPO();
以及其他一些变体,但它不会起作用。
我必须从外部JS文件BTW中做JS。
有什么想法吗?
我正在寻找一种方法来覆盖存储在HTML脚本块中的变量order_poNumber中的值,该脚本块在HTML中是硬编码的。理想情况下,我希望某种迟到甚至延迟的JS进入并在页面加载后覆盖该值。从下拉列表中选择该数字后,有很多步骤(AJAX,ActiveX, JS,jQuery,以及第三方应用程序和我自己的代码和功能的混合),这需要大量工作才能正常工作,所以我不想再搞乱所有这些了。
答案 0 :(得分:2)
浏览器后退按钮的工作方式与初始页面加载不同。您可以使用jquery-address为页面更改添加侦听器(包括来自导航箭头的更改):
$.address.change(function(e) {
resetPO();
});
答案 1 :(得分:1)
继承我会尝试的东西,只是为了看看它是否可行。我们要求浏览器继续重置该值,直到实际重置为止。它确实需要在任何首先设置值的脚本之后执行,因此jQuery的ready()
函数可能比window.onload(可能已被其他东西使用)更有用。不要忘记将它放在结束</body>
标记之前,以确保它最后被执行或加载。
window.onload = function(){
var resetValueInterval = setInterval(function(){
order_poNumber = "";
if(order_poNumber == ""){
clearInterval(resetValueInterval);
}
},100);
}
您也可以不检查是否已设置,而是在设置值时停止检查。这可能永远不会使用更多的资源,但它总是值得一试。当然,如果减少每次迭代之间的时间量,它就会变得更加合理。不是围绕这个问题最优雅的方式,但它可能会有效。
window.onload = function(){
var resetValueInterval = setInterval(function(){
order_poNumber = "";
},100);
document.getElementById(/* order_poNumber-dropdown-id */).addEventListener("mousedown", function(){
clearInterval(resetValueInterval);
}, false);
}