2009-04-28 3 views
4

우리는 null 값을 포함 할 수있는 JSON 응답이 (예를 들어, {myValue : 널 (null)}) - 우리는 폼의 텍스트 상자에이 값을 할당합니다 (실제로, 우리가 JQuery와 사용하지만이 동등HTML 텍스트 상자의 값을 null로 설정해야하는 이유는 무엇입니까?

var nullString = null; 
document.getElementById('myInput').value = nullString; 

.

  • 모두 빈 텍스트 상자를 표시하고, 당신이 '가치'를 읽을 때 다시는 널 얻을 파이어 폭스와 크롬

  • : 우리가 HTML 텍스트 상자 값이 값을 할당하면, 동작은 브라우저에 의존하는 것
  • IE는 'null'을 텍스트 상자에 입력하고 'value'를 다시 읽으면 'null'문자열이 표시됩니다 (예 : http://jsbin.com/uleno/edit 사람이) 브라우저가 여기에 옳은 일을하고있다

    그것을 시도하고 싶어, 또는이 정의되지 않은 동작 인 경우) 데이터를 수정

은 (그것은 여기있다 다시 '값'을 설정하고 그것을 읽기 ? 그리고 (myValue == null? '': myValue) 많은 일을하는 것보다 더 우아한 해결 방법이 있습니까?

답변

2

가 널 객체가 null.toString 같은 캐릭터 라인 화되고있다(). alert() 메시지 상자에서 브라우저는 일반적으로 단순히 문자열을 지정하는 대신 객체를 해석하므로 결과가 달라집니다. 그리고 물론, 브라우저 (특히 IE)는 해석과 문자열 형식이 다르게 적용됩니다.

문자열을 예상 할 때 null을 반환하는 논리가 있습니다. 이 값을 반환하는 것은 무엇이든 쉽게 조건부 테스트에 잘못된 값을 제공하기 위해 결과를 반환하는 반면, 결과는 정의되지 않은 것보다 비어 있음을 나타냅니다. 컬렉션 객체를 반환하는 DOM 메소드도 동일합니다. 또한 빈 문자열 리터럴 ('')은 거짓 값이지만 빈 문자열 객체 (new String (''))는 그렇지 않습니다. 후자는 실수로 추가 처리를 통해 생성 될 수 있습니다. 따라서 소비 코드가 우연히 유효한 문자열을 버리지 못하도록하는 "안전한"방법은 문자열 리터럴 또는 String 객체를 한 사례에서는 반환하고 다른 객체에서는 null을 반환하는 것입니다.

0

왜 빈 문자열을 사용하지 않습니까? 먼저 값을 잘라냅니다. 그런 다음 빈 문자열을 확인하십시오.

String.prototype.trim = function() { 
    return this.replace(/^\s+|\s+$/g,""); 
} 
String.prototype.ltrim = function() { 
    return this.replace(/^\s+/,""); 
} 
String.prototype.rtrim = function() { 
    return this.replace(/\s+$/,""); 
} 
+0

null은 json이 다른 곳에서 생성 된 것으로부터옵니다. null을 빈 문자열로 변환하는 것은 간단합니다. 내가 관심있는 부분은 다른 브라우저가 null을 텍스트 상자에 할당하는 방식입니다. –

1

내 솔루션이 당신에게 도움이 될지 모르겠지만 여기에 새로운 문제가 있다는 것을 인정해야합니다. 가장 큰 이점은 코드가 복잡해지지 않으며이 로직을 처리하는 단일 장소가 있다는 것입니다. 이것은 제가 아는 한 IE에만 ​​한정됩니다.

var input = document.getElementById('myInput'); 

if (input.attachEvent) { 
    input.attachEvent("onpropertychange", function() { 
     var event = window.event; 

     if (event.propertyName === "value" && event.srcElement.value === "null") { 
      event.srcElement.value = ""; 
     } 
    }); 
} 

input.value = null; 

alert(input.value); 
+0

감사합니다. 내가 알지 못했던 깔끔한 기술. 저는 실제로 jQuery를 사용하고 있습니다. 따라서 'val()'함수 대신 텍스트 상자의 내용을 안전하게 설정하는 것이 쉽습니다.나는 브라우저가해야 할 일 *에 대해 몇 가지 힌트를 찾고 있었다. –

+0

내 생각에 리터럴 null로 설정하는 한 해당 값을 문자열 "null"로 설정하는 것은 의미가 없습니다. 반면 FF와 Chrome의 동작은 약간 이상합니다. 단순한 "경고 (null)"는 아무것도 아닌 "null"문자열을 표시하기 때문입니다. 반면 양식 요소 동작은 다릅니다. 그래서 IE는 그 점에서 더 일관성이 있다고 생각합니다. 도움이되지는 않지만. –

3

사실, 할 수있는 가장 간단한 것은 이것이다 :

document.getElementById('myInput').value = nullString || ''; 

당신은 그 값이 필수가가 'falsy'* 값은 빈 문자열을 다른 돌아가있는 경우 있도록 할당 된 문자열을 가져옵니다 알고있다.

* 널 (null), 거짓, 0, 정의되지 않은 ','실제로 무슨 일

관련 문제