JavaScript 对象不起作用

问题描述 投票:0回答:3

我遇到了 JavaScript 对象的问题。我在页面上有一些文本,单击时应转换为文本字段。问题是,当我单击文本时,控制台显示错误消息

“textNode 未定义或为 null 并且 tn 未定义”。

请帮忙,我想以某种方式解决这个问题,这样我就不必将 JavaScript 代码从 head 标签移动到任何其他位置。

这是我的代码:

<!DOCTYPE HTML>
<html>
<head>
<title>Span to Text Box - Demo - DOM</title>
<script type="text/javascript" language="javascript">
function preload()
{
if(!tn) var tn=new Object();
tn.variables=
{
textboxNode: document.getElementById('textbox'),
textNode: document.getElementById('text'),
textValue: textNode.firstChild.nodeValue,
doneButton: document.getElementById('done')
};
}

function change()
{
tn.variables.textboxNode.setAttribute('value', textValue);
tn.variables.textNode.style.display = 'none';
tn.variables.textboxNode.setAttribute('type','text');
tn.variables.doneButton.setAttribute('type','button');
}
function changeBack()
{
tn.variables.textNode.firstChild.nodeValue = textboxNode.value;
tn.variables.textNode.style.display = 'block';
tn.variables.textboxNode.setAttribute('type', 'hidden');
tn.variables.doneButton.setAttribute('type','hidden');
}
</script>
</head>

<body onload= "preload()">
<p id="text" onClick="change()">Click me!</p>
<form onSubmit="return false;">
  <input type="hidden" id="textbox" />
  <input type="hidden" id="done" onClick="changeBack()" value="Done" />
</form>

</body>
</html>

提前致谢。

javascript
3个回答
1
投票

对象

tn
preload
函数的本地对象。

将其定义为全局变量:

var tn = new Object();
function preload()
{
    tn.variables=
    {
        //....
    }
}

而且,当你只定义对象时,你无法获取其他属性值。

textValue
改为函数:

tn.variables =
{
    textboxNode: document.getElementById('textbox'),
    textNode: document.getElementById('text'),
    textValue: function() {
        return this.textNode.firstChild.nodeValue;
    }, 
    doneButton: document.getElementById('done')
};

然后也将其作为函数调用,例如:

tn.variables.textboxNode.setAttribute('value', tn.variables.textValue());

1
投票

我认为你的 tn 变量在全局范围内没有正确设置。尝试像这样修改 JavaScript 的顶部:

<script type="text/javascript" language="javascript">
var tn = null;
function preload()
{
   if(!tn) 
   {
      tn=new Object();
   }
   tn.variables=
   {
     textboxNode: document.getElementById('textbox'),
     textNode: document.getElementById('text'),
     textValue: textNode.firstChild.nodeValue,
     doneButton: document.getElementById('done')
   };
}

1
投票

首先,全局定义 tn - 在预加载范围之外

© www.soinside.com 2019 - 2024. All rights reserved.