-2

这两个都返回真。一个是布尔值,另一个是文本。不应该没有 .value 错误,因为它是指对象而不是对象值属性?请帮助我更多地理解这一点。

<input type="text" name="sigstatus1" id="sigstatus1" style="display:none;" size="40" fieldlength="50"></input>
<input type="text" name="sigstatus2" id="sigstatus2" style="display:none;" size="40" fieldlength="50"></input>

var sigStatus1 = document.getElementById("sigstatus1").value;
var sigStatus2 = document.getElementById("sigstatus2");

sigStatus1 = true;
sigStatus2 = true;

alert("Sig1 " + sigStatus1 + "\nSig2 " + sigStatus2);

小提琴http://jsfiddle.net/Xp7jX/

4

2 回答 2

1

您的问题的直接答案是:

alert("Sig1 " + sigStatus1 + "\nSig2 " + sigStatus2);

将两个值都显示为 true,因为在该行代码之前,您将两个值都设置为 true:

sigStatus1 = true;
sigStatus2 = true;
alert("Sig1 " + sigStatus1 + "\nSig2 " + sigStatus2);

看起来你认为这段代码:

var sigStatus1 = document.getElementById("sigstatus1").value;
sigStatus1 = true;

将 DOM 元素值设置为 true。它不会。

当你这样做时:

var sigStatus1 = document.getElementById("sigstatus1").value;

您只是从 DOM 元素中获取值并将其放入局部变量中。由于它是一个文本字段,因此该值将是一个文本字符串。

当你这样做时:

sigStatus1 = true;

您只是用布尔值替换该局部变量的内容true(它对 DOM 元素没有任何作用)。然后,当您在警报中显示该变量时,javascript 会将布尔值转换为文本(出于显示目的),您会看到“真”。

如果你想设置显示来自 DOM 元素的值,你可以这样做:

var sigStatus1 = document.getElementById("sigstatus1").value;
alert(sigStatus1);

如果你想设置 DOM 元素的值,你可以这样做:

document.getElementById("sigstatus1").value = "whatever";
于 2012-04-04T20:09:43.263 回答
0

这两个值都是 boolean true,您正在显式覆盖这些值:

sigStatus1 = true;
sigStatus2 = true;

也许你在找这个?

var sigStatus1 = document.getElementById("sigstatus1").value;
var sigStatus2 = document.getElementById("sigstatus2");
alert("Sig1 " + sigStatus1 + "\nSig2 " + sigStatus2);

变量sigStatus2应该提醒类似的东西[object HTMLDivElement](由 objectstoString方法在内部生成)。

于 2012-04-04T19:40:38.470 回答