JavaScript объект не работает - PullRequest
0 голосов
/ 27 ноября 2011

У меня проблема с объектами JavaScript.У меня есть текст на странице, который должен быть преобразован в текстовое поле при нажатии.Проблема в том, что когда я щелкаю текст, консоль отображает сообщение об ошибке

«textNode не определен или ноль и 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>

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 27 ноября 2011

Я думаю, что ваша переменная 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 голос
/ 27 ноября 2011

для начала определите глобально - вне пределов предварительной нагрузки

1 голос
/ 27 ноября 2011

Объект 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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...