2009-04-28 66 views
4

我們有哪些可以包含空值的JSON響應(例如{myvalue的:空}) - 我們這個值分配給窗體上的文本框:(實際上,我們使用JQuery,而這相當於什麼應該設置HTML文本框值爲null呢?

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

如果我們分配這個值的HTML文本框的值,該行爲似乎依賴於瀏覽器:

  • Firefox和Chrome都顯示一個空的文本框,當你閱讀「價值」回你空

  • IE放置字符串'null'放入文本框中,當你讀取'value'時,你會得到字符串「null」(即設置「值」並讀已修改的數據)

(它在這裏:http://jsbin.com/uleno/edit,如果有人想嘗試一下)

哪個瀏覽器在這裏做正確的事,或者是這個不確定的行爲?有沒有比做很多(myValue == null?'':myValue)東西更聰明更優雅的解決方法?

回答

2

什麼是實際發生的事情是空對象被字符串化,像null.toString()。在alert()消息框中,瀏覽器通常會解釋對象而不是簡單地對其進行字符串化,因此結果會有所不同。當然,瀏覽器(特別是IE)的解釋和字符串化的方式也不同。

對於什麼是值得的,有一個邏輯來預期字符串時返回null。無論返回什麼值,都可能這樣做,以便爲簡單的條件測試提供一個錯誤值,同時仍然指示結果是空的而不是(例如未定義的)。返回集合對象的DOM方法也一樣。此外,雖然空字符串文字('')是假值,但空字符串對象(新字符串(''))不是;後者可以由前者偶然進行後續處理而創建。因此,防止消費代碼意外丟棄有效字符串的「安全」方式是在一種情況下返回字符串文字或字符串對象,在另一種情況下返回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到文本框的分配。 – 2009-04-28 14:18:25

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()'函數的替代品以安全設置文本框內容可能非常簡單。我更希望提供一些關於瀏覽器應該具備的功能。 – 2009-04-28 17:12:29

3

其實,做最簡單的事情是這樣的:

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

你知道值必須獲得分配的,所以如果它的任何其他「falsy」 *值,返回空字符串的字符串。

*空,未定義,0,假 ''

相關問題