2014-01-28 1 views
0

나는 SPA가 아닌 asp.net mvc 응용 프로그램에서 angularjs를 사용합니다.텍스트 필드의 자동 완성 = off는 뒤로 버튼을 사용할 때 그것을 죽입니다.

"편집 항목"양식 안에는 자동 완성 = "해제"로 설정된 일부 필드가 있으며 일부는이 특성을 사용하지 않습니다. 페이지를로드하면 모든 필드가 해당 값으로 올바르게 설정됩니다. 이 문제는 링크를 클릭하여 다른 페이지 (SPA가 아니기 때문에 전체로드)로 이동 한 후 뒤로 버튼을 클릭하여 양식으로 되돌아 올 때 발생합니다.

파이어 폭스에서 자동 완성 = off 인 모든 필드는 페이지로 돌아올 때 비어 있습니다. 그러나 때로는 그들은 (종종 덜 자주) 확인으로 돌아옵니다. 크롬과 IE에서 시도한 결과이 브라우저에서 잘 작동합니다.

알려진 문제? 해결 방법은 없습니까?

업데이트 : firebug가 열려 있으면 (예 : 콘솔 로그에서 디버깅하기 위해) 페이지 새로 고침이 강제 실행 된 것처럼 (깜박임) 문제가 발생하지 않습니다. Console.log는 페이지로 돌아올 때 ngModel이 올바른지 보여줍니다. 자동 완성/꺼짐 필드 만 올바르게 다시 그려지지 않습니다. 방화범이 풀린 쇼가 아무런 문제도 보이지 않기 때문에 더 이상 디버깅 할 수 없습니다.

감사

+0

정상적인 현상입니다. 링크를 클릭하고 컴백하면 입력 한대로 모든 양식 필드가 채워질 것으로 예상됩니까? 질문은 URL간에 데이터를 공유하는 방법에 대한 것입니다. 쿠키, localStorage, 세션 등 – allenhwkim

+0

그래, 내가 그것을 기대하고 지금까지 AngularJS를 사용하지 않을 때 그것에 대해 걱정할 필요가 없었습니다. 나는 브라우저가 요즘 그렇게한다고 생각하고 쿠키, localstorage 또는 세션으로 코드를 작성할 필요가 없습니다. –

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

을 (또는 :

당신은이 두 가지 기능에 던질 수 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

다른 해결 방법은 리디렉션 전에 세션에서 해당 입력을 저장하는 것입니다. –

+0

HTML5 세션 저장소도 있습니다. http://stackoverflow.com/questions/12155623/how-to-have-form-values-same-on-back-button-click-in-ie – SoluableNonagon

+0

감사합니다. @EliteOctagon . 그러나, read()에서 jquery를 사용하면 아무 일도 일어나지 않습니다. 대신 각도 컨트롤러에서 값을 설정하려고하면 아무 것도 발생하지 않습니다 (각도가 나중에 입력 필드를 뒤덮습니다). –

관련 문제