2014-10-31 86 views
0

我正在使用第三方應用程序,他們有一個JS變量硬編碼到他們的HTML,我需要更改/更新與JavaScript或jQuery,都可以使用。更改硬編碼JS變量值

的第三方應用程序已經變量硬編碼到頁面:

<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文件做BT。

任何想法?

我正在尋找一種方法來覆蓋硬編碼在HTML中的JS腳本塊中的變量order_poNumber中存儲的值。理想情況下,我希望某種遲到或甚至延遲的JS進入並在頁面加載後覆蓋該值。在下拉菜單(AJAX,ActiveX,JS,jQuery,以及第三方應用程序和我自己的代碼和函數的混合)中選擇了一個數字後,有很多步驟需要花費大量工作才能工作正確的,所以我不想再混淆了所有這些。

+1

我可以想象價值的唯一原因是它被存儲在cookie中。你需要驗證這一點,如果是的話,你需要編寫一個腳本來清除cookie中的值。 – trnelson 2014-10-31 16:50:59

+1

你最近怎麼樣「回來」?如果您使用的是瀏覽器的_back_按鈕,則爲「窗口」。onload'可能並不總是被解僱。看看[這個問題](http://stackoverflow.com/questions/158319/cross-browser-onload-event-and-the-back-button) – 2014-10-31 16:52:16

+1

類似於@trnelson所說的,該值也可以是緩存並從'sessionStorage'重置(或者,在本例中爲'localStorage')。 – 2014-10-31 16:53:52

回答

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); 
} 
+0

感謝您的建議。我試了一下,但沒有運氣。在嘗試了很多事情之後,我確定重置/更改order_poNumber並不能完成我所需要的操作,即使它最終會被更改。 – Brett 2014-11-04 14:58:50

+0

答案接受,因爲它是最有幫助的,一些建議的事情幫助我認識到,改變變量沒有我期望的效果。 – Brett 2014-11-04 15:02:52

2

瀏覽器後退按鈕的工作方式與初始頁面加載不同。您可以使用jQuery的地址到偵聽器添加到頁面的變化(包括導航箭頭的):

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

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

+0

感謝您的建議,但它看起來像甚至讓變量order_poNumber更改不能解決我遇到的問題,我想它會。 – Brett 2014-11-04 15:00:29