Как правильно установить объект getElementById? - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть некоторый JavaScript, в котором я установил глобальную переменную для хранения функции document.getElementById.Затем в функции из того же файла я пытаюсь использовать эту переменную вместе с id элемента абзаца HTML для записи в свойство innerHTML.Однако в консоли IE11 появляется сообщение об ошибке «SCRIPT65535: недопустимый вызывающий объект».Явное написание document.getElementByID("someid").innerHTML = "value" работает.Вот ключевые части кода (все в одном файле).

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <p id="name1"></p>
    <script>
      var objDocGEBI = document.getElementById;

      function writeData() {
        if (true) {
          objDocGEBI("name1").innerHTML = "value";
        }
      }
    </script>
  </body>
</html>

Ответы [ 4 ]

0 голосов
/ 11 сентября 2018

Ваша проблема связана с привязкой функции .

Короткая версия, вам нужно привязать функцию к документу так:

var objDocGEBI = document.getElementById.bind(document);

Это обеспечит правильную привязку документа к документу без фактического запуска функции. Как только вы исправите эту строку, вы обнаружите, что остальная часть вашего кода выше работает как задумано.

0 голосов
/ 11 сентября 2018

Это потому, что ваша переменная objDocGEBI хранит метод / функцию в синтаксисе прослушивателя событий, но это не прослушиватель событий.Правильный синтаксис:

function writeData(name) {
    if (true) {
        document.getElementById(name).value = "value";
    }
}
0 голосов
/ 11 сентября 2018

Это может быть полезно для вас:

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <p id="name1"></p>
    <p id="name2"></p> <!-- added, just for a 2nd example -->
    <script>
    

    function writeData(id, value){
        document.getElementById(id).innerHTML = value;
    }
    
    writeData('name1', 'John'); 
    writeData('name2', 'Peter');
    </script>
  </body>
</html>

Так намного чище, и вам не придется хранить эту странную переменную.;)

0 голосов
/ 11 сентября 2018

Потому что вам нужно вызвать вашу функцию для выполнения функции innerHTML.

И вы не можете использовать свой синтаксис.Вам нужно написать document.getElementById; так:

Первый путь:

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <p id="name1"></p>
    <script>
    var objDocGEBI = document.getElementById('name1');

    function writeData(){
      if (true){
        objDocGEBI.innerHTML = "value";
      }
    }
    
    writeData(); // it's calling your function and execute your innerHTML
    </script>
  </body>
</html>

Второй путь:

// Example with IIFE
(() => {
 var objDocGEBI = document.getElementById('name1');
 if (true){
     objDocGEBI.innerHTML = "value";
  }
})()
...