2009-04-28 97 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,假 ''

相关问题