Javascript 在Firefox中检查字符串

Javascript 在Firefox中检查字符串,javascript,firefox,browser,comparison,Javascript,Firefox,Browser,Comparison,我正在使用 var txtname=document.getElementById('<%=txtname.ClientID%>').value; if (txtName == "") .... var txtname=document.getElementById(“”).value; 如果(txtName==“”)。。。。 但在FF中,这是行不通的。这种情况永远不会发生。即使它没有价值。 在IE和Chrome中工作良好 有人能告诉我如何解决这个问题吗…使用===而不是

我正在使用

var txtname=document.getElementById('<%=txtname.ClientID%>').value;    
if (txtName == "") ....
var txtname=document.getElementById(“”).value;
如果(txtName==“”)。。。。
但在FF中,这是行不通的。这种情况永远不会发生。即使它没有价值。 在IE和Chrome中工作良好


有人能告诉我如何解决这个问题吗…

使用===而不是==。

看起来您使用的是某种服务器端语言与javascript混合

txtname.ClientID
实际计算的是什么,页面上有什么

很可能您没有使用
document.getElementById
调用选择实际元素

ChromeIE可能以一种方式处理此问题(当您尝试访问值时返回空字符串)

Firefox可能会以另一种方式处理它(返回null,尝试从null对象获取值时返回错误,并停止处理javascript)

要了解其工作原理,请尝试在firefox中打开下面的文件。前两次尝试(当执行空检查时)将正确报告已找到或未找到的条件

在第二次尝试中(当null检查不到位时),第一次(找到的元素)工作正常,但第二次失败,因为
document.getElementById
返回null,firefox不知道如何从该错误继续

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>CSS Reset</title>


</head>
<body>
<input id="value1" type="text" value="value1"/>

<script language="javascript">

alert('finding value1 with null check');
var element = document.getElementById('value1');
if ( element == null ){
    alert('not found');
}
else{
    var txtname = element.value;
    alert(txtname);
}

alert('finding value2 with null check');
var element = document.getElementById('value2');
if ( element == null ){
    alert('not found');
}
else{
    var txtname = element.value;
    alert(txtname);
}


alert('finding value1 without null check');
var txtname = document.getElementById('value1').value;
alert(txtname);

alert('finding value2 without null check');
txtname = document.getElementById('value2').value;
alert(txtname);

alert('finished');
</script>

</body>
</html>

CSS重置
警报(“使用空检查查找值1”);
var元素=document.getElementById('value1');
if(元素==null){
警报(“未找到”);
}
否则{
var txtname=element.value;
警报(txtname);
}
警报(“使用空检查查找值2”);
var元素=document.getElementById('value2');
if(元素==null){
警报(“未找到”);
}
否则{
var txtname=element.value;
警报(txtname);
}
警报(“查找值1而不进行空检查”);
var txtname=document.getElementById('value1').value;
警报(txtname);
警报(“查找值2而不进行空检查”);
txtname=document.getElementById('value2').value;
警报(txtname);
警报(“完成”);

确保没有两个元素具有相同的id(或名称!)。请阅读下面的内容

  • 首先,如果文档中有
    “txtname”
    “txtname”
    ,并且使用了
    getElementById('txtname')
    ,则IE中可能会出现错误的元素

  • 此外,IE将元素的名称视为id

  • 最后,确保使用view source检查页面的html输出,以查看
    返回的内容。。可能是一个空字符串或者你没想到的东西


尽管这可能无法解决问题,但您可以将比较更改为:

if (!txtName)
  ....

如果txtName为null、未定义或为空字符串,则此操作将成功。

您应该检查ff的错误控制台

按CTRL+Shift+J并检查是否发生错误

此外,FF插件Firebug还可以帮助您调试javascript。它提供了类似ide的调试模式

并且
允许在JSP上使用javacode表达式,您确定这是允许使用
document.getElementById
的正确id吗

试试这段代码


如果((typeof txtName==“undefined”)| |(txtName.length==0))

您是否尝试过发出警报(txtName.length)?我不确定是否在JavaScript中比较空白值。他使用的是JavaScript,===不是JavaScript中的运算符。==是运算符(意思是:与相同)。但这不是问题所在here@tschable:==是有效的javascript运算符。@activa和@Joel。。。我搞错了,谢谢你更正了。txtname.ClientID在元素呈现给客户端后计算为元素的id。那部分很好。但它的计算/渲染目的是什么?根据该元素是否不在页面上,或者该ID是否已被其他元素使用,可能会引入错误。它会呈现为丑陋的字符串。NET重命名页面上的控件,这样就不会有冲突,而获取生成id的方法就是通过这种混乱。