2016-05-26 4 views
0

Я хотел бы создать объект в javascript, который печатает число entred, но я получаю эту ошибку.JS: Объект не определен

Déclaration d'objet.html:30 

Код:

<script type="text/javascript"> 
    // <!-- 
    function Init() 

     { 
      var test= new Object; 
      test.affiche= function() 
      { 
       var champ=Number(document.getElementById("champSaisie").value); 
       alert(Number(champ+4)); 
      }; 
     } 
    </script> 
</head> 
<body onload="Init()"> 

<p><label for="champSaisie">Saisissez un nombre&nbsp;: </label><input type="text" id="champSaisie"></p> 
<p><input type="submit" onclick="test.affiche()" value="Effectuer le calcul"></p> 



</body></html> 

ответ

2

test является местного функции Init. Вы не можете получить к нему доступ в обработчике событий (onclick="test.affiche()"), потому что он не является глобальным.

В этом примере нет никаких оснований ставить код внутри Init на всех, вы можете просто поместить непосредственно

var test= new Object; 
test.affiche= function() 
{ 
    var champ=Number(document.getElementById("champSaisie").value); 
    alert(Number(champ+4)); 
}; 

в <script>. Это сделало бы test глобальным. Нет никакой пользы в ожидании загрузки страницы перед созданием объекта.

Вы также можете create a global variable изнутри Init.

Однако лучшим решением было бы, вероятно, избежать глобальных привязок и bind the eventhandler inside Init вместо использования встроенных обработчиков событий.

Похожие: What is the scope of variables in JavaScript?

3

переменной, что вы создаете, testявляется локальная к вашей Init функции.

При попытке доступа test в вашем onclick обработчика, он ищет testна глобальный уровне, который не существует.

Вместо этого я обновил код для использования addEventListener.

function Init() { 
 
    var test = {}; 
 
    test.affiche = function() { 
 
    var champ = Number(document.getElementById("champSaisie").value); 
 
    alert(Number(champ + 4)); 
 
    }; 
 
    document.getElementById("calc").addEventListener("click", test.affiche); 
 
} 
 

 
Init();
<p> 
 
    <label for="champSaisie">Saisissez un nombre&nbsp;:</label> 
 
    <input type="text" id="champSaisie"> 
 
</p> 
 
<p> 
 
    <input id="calc" type="submit" value="Effectuer le calcul"> 
 
</p>

+0

Спасибо вам, но нет возможности держать мой код? потому что в теле я загружаю функцию Init так, чтобы она не находила ее нет? – unfoudev

+0

с использованием встроенных обработчиков событий '(onclick =" blah() ")' считается плохой практикой для многих. Вы не можете динамически добавлять или удалять их. Вы разделяете свой код на два места (код и HTML, из которого он вызывается). Если вы действительно хотите сохранить встроенные обработчики, вам нужно переместить вещи в глобальную область. –

+0

'Déclaration d'objet.html: 15 Uncaught TypeError: Не удается прочитать свойство addEventListener из null. Я получаю эту ошибку сейчас. – unfoudev

Смежные вопросы