更改硬编码的JS变量值

时间:2014-10-31 16:48:10

标签: javascript jquery html variables

我正在使用第三方应用,他们将一个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,以及第三方应用程序和我自己的代码和功能的混合),这需要大量工作才能正常工作,所以我不想再搞乱所有这些了。

2 个答案:

答案 0 :(得分:2)

浏览器后退按钮的工作方式与初始页面加载不同。您可以使用jquery-address为页面更改添加侦听器(包括来自导航箭头的更改):

$.address.change(function(e) {
    resetPO();
});

http://github.com/asual/jquery-address

答案 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);
}