Javascript问题:此代码如何工作?

时间:2016-06-27 22:54:47

标签: javascript

对这个模糊的问题道歉,但我一直在绞尽脑汁为什么我的代码在两小时内没有工作,两小时后我终于开始工作了。只有我不知道为什么它现在有效。继承人的情景。

我有一个"人"具有人1,人2和人3的对象,其中有各种键。我有一个循环通过人对象的按钮,并将person1,person2等放入表格" row"。 (person1等在第一个" td"中各自都有一个单选按钮。)

然后我点击一个按钮,检查我是否选择了上面提到的一个单选按钮。按下按钮后,它再次循环通过对象,主要是因为我正在使用" document.getElementById"识别单选按钮。通过循环遍历people对象,我可以在下面:

for (var property in people) {
var radioButton = document.getElementById(property + "radio");
    if (radioButton.checked === true) {
    sessionStorage.setItem("macomCode", selectMacomField.value);
    sessionStorage.setItem("displayName", people[property].displayName);
    sessionStorage.setItem("dodId", people[property].edipi);
    sessionStorage.setItem("ptc", people[property].ptc);
    sessionStorage.setItem("email", people[property].email);
    sessionStorage.setItem("emailServiceClass", people[property].serviceClass);
    sessionStorage.setItem("mobileServiceClass", people[property].mobileServiceClass);
    sessionStorage.setItem("rms", people[property].rms);
    sessionStorage.setItem("journaling", people[property].journaled);
    window.open("depo/WilliamDepoPage.html",'_blank');//'width = 930, height = 700'*/
    break;
    }
}

基本上上面的代码循环通过people对象检查是否检查了radioButton。然后,它将在people对象中找到的相应密钥存储到SessionStorage中,并打开一个窗口,其中将填充信息。中断确保代码在找到匹配后不会重复。

我用上面的代码注意到的事情是,只有当person1在场上时它才会起作用。因此,如果我在字段上只有person3,则会抛出&#34的错误;无法获得null" (指的是radioButton)。当我在场上只有person2时也是如此。但只要person1与person2和person3在场上,它就能完美运行。

经过一番修修补补后,我想出了这段代码:

for (var property in people) {
var radioButton = document.getElementById(property + "radio");
if (radioButton !== null) {
if (radioButton.checked === true) {
sessionStorage.setItem("macomCode", selectMacomField.value);
sessionStorage.setItem("displayName", people[property].displayName);
sessionStorage.setItem("dodId", people[property].edipi);
sessionStorage.setItem("ptc", people[property].ptc);
sessionStorage.setItem("email", people[property].email);
sessionStorage.setItem("emailServiceClass", people[property].serviceClass);
sessionStorage.setItem("mobileServiceClass", people[property].mobileServiceClass);
sessionStorage.setItem("rms", people[property].rms);
sessionStorage.setItem("journaling", people[property].journaled);
window.open("depo/WilliamDepoPage.html",'_blank');//'width = 930, height = 700'*/
break;
}
}
}

我添加的全部是:if (radioButton !== null) {我现在可以自己拉取person3和person2,并且不会发生错误。我知道这会检查一个radioButton是否在屏幕上,但我不明白它在上述代码的整个方案中播放的内容。对我来说,如果" radioButton"存在于页面上执行代码。好吧,甚至在我输入if(radioButton !== null)之前,radioButton已经在屏幕上,但是抛出一个错误,说radioButton是null。

对于很长的帖子感到抱歉,但有人可以告诉我if(radioButton !== null)使这段代码有效吗?我很高兴它,我只是想知道为什么它会突然起作用。

感谢时间和帮助。

1 个答案:

答案 0 :(得分:1)

因为您没有提供HTML内容。我猜,单选按钮列表的格式如下:

<input ... id="1radio">
<input ... id="2radio">
<input ... id="3radio">

for (var property in people)表示i=0...2,我们没有id="0radio"的广播,对吗? :)

希望我的回答可以帮到你。