2014-10-09 4 views
2

대체 변수 (localStorage에서)를 찾을 수없는 경우 다음 스크립트가 Value 속성을 완전히 삭제하는 아주 이상한 버그입니다.Jquery .attr 및 Chrome에서 .prop 속성 삭제.

내 HTML : Xcode의 항목이 로컬 스토리지의 모든 일에 발견 된 경우

<form> 
<input class="xfield" type="hidden" name="source" value="x111" /> 
</form> 

JS

<script> 

    var thecode = localStorage.getItem("xcode"); 
    if (thecode != "undefined" && thecode != "null") { 
     $(".xfield").attr("value",thecode); 
} 

</script> 

은 기본적으로 잘 작동하고 기본 값은 대체됩니다. 그러나 xcode가 localStorage에서 발견되지 않으면 그 결과 (그리고 크롬에서만 보입니다. Firefox는 정상적으로 작동하고 기본값으로 유지됩니다)는 value 속성이 완전히 지워진다는 것입니다.

나는 .prop 대신에 $(window).load(function(){에 포장하는 것으로 시도했지만 아무런 효과가 없습니다. 내가 여기서 잘못하고있는 어떤 생각?

+0

'$ (". xfield"). val (thecode);를 사용해 보셨습니까? – Regent

+0

"null"과 "undefined"를 문자열로 사용할 수 있습니까? 아니면 키워드입니까? – STT

답변

1

당신의 목표는 (도 undefinednull을있는), undefined 또는 null를 확인 후 undefined 또는 null하지 "undefined""null"를 확인하는 경우 "null" != null. :-)

var thecode = localStorage.getItem("xcode"); 
if (thecode != undefined) { // Loose != works for both undefined and null 
    $(".xfield").attr("value",thecode); 
} 

그러나 getItemundefined (이 키가 존재하지 않는 경우 null을 반환하는 데 필요한, 그리고 문자열 [나 다른 저장 가능한 같은 캔버스]는 않는 경우) 반환하지 않습니다, 그래서 : 코드는 항상 당신이 걱정하는 경우에 비 비어있을 경우

var thecode = localStorage.getItem("xcode"); 
if (thecode !== null) { 
    $(".xfield").attr("value",thecode); 
} 

, 당신은 직접 thecode을 테스트 할 수 있습니다

var thecode = localStorage.getItem("xcode"); 
if (thecode) { 
    $(".xfield").attr("value",thecode); 
} 

을 그 어떤 진리 가치 로라도 설정할 것입니다. undefined, null""은 모두 멍청합니다 (0, NaNfalse인데, getItem에서 가져올 수는 없습니다).

+1

Doh! 여기에 종합적인 분석을 해줘서 고맙습니다. – Epleroma

+0

이상한 일이 있습니다. 다른 사이트에서 동일한 작업 코드를 사용했는데 이제는 다시 작동하지 않습니다. 항목이 로컬 저장소에 저장되어 있음에도 불구하고 입력 값을 페이지 기본값으로 남겨두기 만하면됩니다. 여기서 내가 생각할 수있는 가장 큰 차이점은이 다른 사이트가 게으른로드를 사용한다는 것입니다. 그것과 같은 것이 localstorage가 어떻게 든 검색되는 것을 막을 수 있습니까? – Epleroma

+0

@Epleroma : 아니요.하지만 코드를 실행할 때 관련 요소가 존재하는지 확인해야합니다. 예를 들어, 위의 경우'.xfield' 엘리먼트가 있기 전에 코드를 실행하면 아무 것도 할 수 없습니다. '$()'에 의해 발견되기 위해서는'$()'*를 호출 할 때 요소가 존재해야합니다. –

3

"underfined" !== undefined 때문에

if (thecode!==null) { 
    $(".xfield").val(thecode); 
} 
+0

좋은 점은'getItem'은'undefined'를 반환 할 수 없습니다. –

+0

그래,이 작품, 몇 가지 이유로 내가 거기에 문자열을 몰랐어요. – Epleroma