2014-01-28 44 views
0

我在一個不是SPA的asp.net mvc應用程序中使用angularjs。autocomplete =關閉文本字段在使用後退按鈕時將其殺死它

在「編輯條目」窗體中,我有一些設置爲autocomplete =「off」的字段,有些不使用此屬性。當我加載頁面時,所有字段都被正確設置爲它們各自的值。當我點擊一個鏈接轉到另一個頁面(滿載,因爲這不是一個SPA),點擊後退按鈕返回到表單,問題就出現了。

在firefox下,所有自動完成=關閉的字段在返回頁面時都是空的。但有時他們會回來(不太常見)。我嘗試在Chrome和IE瀏覽器下運行,並且與這些瀏覽器配合使用。

已知的問題?任何解決方法?

更新:如果firebug已打開(例如,在控制檯日誌中進行調試),那麼問題不會發生,就像刷新頁面被迫(閃爍)一樣。 Console.log顯示返回頁面時ngModel是正確的。只有自動完成/關閉字段不能正確重繪。我無法調試更多,因爲有螢火蟲打開顯示沒有問題。

感謝

+0

這是一個正常的行爲。你點擊一個鏈接並復出,並且你希望所有的表單域都填入你輸入的內容?問題在於你如何在網址之間分享數據。 cookie,localStorage,會話等。 – allenhwkim

+0

是的,我期待它,到目前爲止,當我不使用AngularJS時,我從來不必擔心它。我猜瀏覽器現在這樣做,我沒有什麼可以用cookies,本地存儲或會話編碼... –

+0

感謝您的更新。當你設置自動完成=「關閉」時,我使用Chrome和AngularJS的事件做了同樣的事情,當你回來時它不會填寫表單。你可以在這裏測試,http://jsfiddle.net/ta8kZ/ – allenhwkim

回答

0

如果我理解正確你:你將信息輸入到一個頁面上的表單,然後向前導航,但是當你按下背面的信息沒有了嗎?

我不知道在Firefox中行爲的原因,但是解決方法很簡單且很髒:將參數保存在URL或URL哈希中。我更喜歡將數據存儲在散列中。

您可以在這兩個函數拋出:

// this function takes in your URL and creates and object with key/value pairs you can read 
function readFromURLHash(url) { 
    var pairObject = {}; 
    var pairs = url.substring(url.indexOf('?') + 1).split('&'); 
    for (var i = 0; i < pairs.length; i++) { 
    var pair = pairs[i].split('='); 
    pairObject[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]); 
    } 
    return pairObject; 
} 

// whatever parameters you want 
function saveInHash(parameter1, parameter2, parameter3, parameter4, parameter5){ 
    if(typeof errorMessage === 'undefined') 
     errorMessage = ""; 
    window.location.hash = "#?parameter1="+parameter1+"&parameter2="+parameter2+"&parameter3="+parameter3+"&parameter4="+parameter4+"&parameter5="+parameter5; 
} 

所以,在你走之前到另一個頁面(或任何時候,一個輸入字段是模糊的),保存參數到散,那麼,作爲在onload的一部分(或jQuery的.ready()函數)在URL中讀取並填充字段。

$(document).ready(function(){ 
    // read in url 
    var savedData = readFromURLHash(); 
    // populate field 

    $('#someInputField').val(savedData.someInputField); 
    // or with angular 
    $scope.someInputFieldModel = savedData.someInputField; 

}); 
+0

另一個解決方法是在重定向之前將會話保存在會話中。 – 2014-01-28 18:09:53

+0

還有HTML5會話存儲,請參閱:http://stackoverflow.com/questions/12155623/how-to-have-form-values-same-on-back-button-click-in-ie – SoluableNonagon

+0

謝謝@EliteOctagon 。然而,在read()中使用jquery什麼也不做(是否太快?),$ scope在那裏是未知的。如果我嘗試在角度控制器中設置值,則不會發生任何事情(角度似乎稍後會覆蓋輸入字段)。 –

相關問題