Ошибка Uncaught TypeError: невозможно установить для свойства onclick значение null

У меня возникла ошибка в Facebook Javascript «Uncaught TypeError: невозможно установить свойство onclick со значением null», строка 187 и строка 187:

" button.onclick = function() {"

Весь код:

<script type="text/javascript">
window.fbAsyncInit = function() {
  FB.init({ appId: <?php echo json_encode($this->getApiKey()) ?>, 
        status: true, 
        cookie: true,
        xfbml: true,
        oauth: true});
 FB.Canvas.setSize({ width: 640, height:1500 });
 //FB.Canvas.setAutoResize();
 function updateButton(response) {
    var button = document.getElementById('fb-auth');

    if (response.authResponse == 'null') {
      //user is already logged in and connected
      var userInfo = document.getElementById('user-info');
     FB.api('/me', function(response) {


      });

      button.onclick = function() {
        FB.logout(function(response) {
          var userInfo = document.getElementById('user-info');
          userInfo.innerHTML="";
    });
      };
    } else {
      //user is not connected to your app or logged out
      //button.innerHTML = 'Login';
      button.onclick = function() {
        FB.login(function(response) {
if(response.status=='connected') setLocation('<?php echo $this->getConnectUrl() ?>');
      if (response.authResponse) {
            FB.api('/me', function(response) {
          var userInfo = document.getElementById('user-info');


        });  

          } else {
            //user cancelled login or did not grant authorization
          }
         }, {scope:'email, user_birthday'});    
      }
    }
  }

  // run once with current status and whenever the status changes
  FB.getLoginStatus(updateButton);
  //FB.Event.subscribe('auth.statusChange', updateButton);  
};

(function() {
  var e = document.createElement('script'); e.async = true;
  e.src = document.location.protocol 
    + '//connect.facebook.net/en_US/all.js';
  document.getElementById('fb-root').appendChild(e);
}());

</script>

Если вам нужна дополнительная информация, просто скажите мне, что я ценю помощь. Спасибо!.


person Mark Anthon    schedule 21.05.2013    source источник


Ответы (2)


Беглый взгляд на ваш код показывает, что кнопка не существует, когда вы пытаетесь получить к ней доступ:

function updateButton(response) {
    var button = document.getElementById('fb-auth');
    //there is no element with id fb-auth
    console.log("button is now:",button);

Пожалуйста, поместите туда какой-нибудь console.log, как в примере выше, после того, как вы установили переменную кнопки и прежде чем пытаться ее использовать, а затем обновите свой вопрос, где именно что-то идет не так.

Используйте Chrome или Firefox с плагином firebug, чтобы увидеть правильные console.logs, и нажмите F12, чтобы открыть инструменты разработчика (по умолчанию открывается вкладка консоли).

[ОБНОВИТЬ]

Я удалил код, относящийся к кнопке fb-auth, поэтому, если этот код был старым и неиспользованным, должно работать следующее:

<script type="text/javascript">
window.fbAsyncInit = function() {
  FB.init({ appId: <?php echo json_encode($this->getApiKey()) ?>, 
        status: true, 
        cookie: true,
        xfbml: true,
        oauth: true});
 FB.Canvas.setSize({ width: 640, height:1500 });
 function updateButton(response) {
    if (response.authResponse == 'null') {
     //user is already logged in and connected
     var userInfo = document.getElementById('user-info');
     FB.api('/me', function(response) {
     });
    } else {
  // run once with current status and whenever the status changes
  FB.getLoginStatus(updateButton);
  //FB.Event.subscribe('auth.statusChange', updateButton);  
};

(function() {
  var e = document.createElement('script'); e.async = true;
  e.src = document.location.protocol 
    + '//connect.facebook.net/en_US/all.js';
  document.getElementById('fb-root').appendChild(e);
}());
</script>
person HMR    schedule 21.05.2013
comment
Там написано button is now: null . - person Mark Anthon; 22.05.2013
comment
Вы слишком рано вызываете функцию updateButton? Кажется, нет элемента с идентификатором fb-auth, поэтому вы не можете добавить к нему событие onclick. Ваш код не отображается, когда вызывается fbAsyncInit, но я предполагаю, что он вызывается, когда контент еще не загружен или вы ожидаете контента, которого нет. - person HMR; 22.05.2013
comment
Верно, вызова к fb-auth нет, я просто изменил вызов на .. ‹a href=# title=Facebook Connect rel=facebook-connect id=fb-auth›‹img style=width:65px; src=‹?php echo $this-›getSkinUrl('images/flogin.jpg') ?› id=facebook alt=facebook login /›‹/a› Но все то же самое.. Этот вызов представляет собой html, который не отображается в сети, я имею в виду, никто не пойдет туда.. - person Mark Anthon; 22.05.2013
comment
Размещенный вами html-код; это часть вашей страницы? Если это так, то document.getElementById(fb-auth) не должен возвращать значение null, если ваш код и href не находятся в разных фреймах. - person HMR; 22.05.2013
comment
Да, это часть моей страницы, но, как я уже сказал, веб никогда не используется, это старый логин. Как я могу это исправить? Код ошибки находится на прототипе.js, а код ‹a href=# title=Facebook Connect rel=facebook-connect id=fb-auth›... находится в старом логине. - person Mark Anthon; 22.05.2013
comment
Если я помещу этот код в любую сеть и перейду туда, ошибка исчезнет, ​​но если я изменю веб-страницу, которая не вызывает этот идентификатор, она снова выдаст ошибку. Как сделать так, чтобы этот код не вызывался каждый момент?, в каждой сети? или как заставить исчезнуть эту ошибку, не размещая код на всех сайтах. - person Mark Anthon; 22.05.2013
comment
Код ошибки находится на прототипе.js Итак, у вас теперь другая ошибка? var userInfo = document.getElementById('user-info'); правильно из вашего кода; не из прототипа? - person HMR; 22.05.2013
comment
Нет, я ошибаюсь, объясняя, ошибка все та же, но, как вы говорите, вызывается, но я предполагаю, что она вызывается, когда контент еще не загружен, если кнопка загружена ‹a href=# title=Facebook Connect rel=facebook -connect id=fb-auth›‹img style=width:65px; src=‹?php echo $this-›getSkinUrl('images/flogin.jpg') ?› id=facebook alt=facebook login /›‹/a› ошибка исчезает, поэтому как ее исправить, не помещая кнопку на веб-страница? - person Mark Anthon; 22.05.2013
comment
@MarkAnthon Я вижу, я обновил ответ и удалил код, который ссылался на старый код, который больше не используется. Вы можете попробовать и посмотреть, работает ли это. - person HMR; 22.05.2013
comment
Выдает эту ошибку: ‹!DOCTYPE html PUBLIC --//W3C//DTD XHTML 1.0 Transitional//EN w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd› Uncaught SyntaxError: неожиданный конец ввода ‹html xmlns=w3.org/1999/xhtml xml:lang=es lang=es› - person Mark Anthon; 23.05.2013
comment
@MarkAnthon Знаете ли вы, как использовать инструменты разработчика в браузере? Можете ли вы открыть его в Chrome и нажать F12, а затем проверить консоль, чтобы увидеть, ОТКУДА возникает ошибка? Какая строка и вызвана ли она вообще Javascript? - person HMR; 23.05.2013

Возможно, потому что ваш JavaScript не находится внизу вашей страницы, и когда он запускается, дерево DOM еще не построено. попробуйте разместить свой код в другой части вашей html-страницы после того, как ваши элементы будут созданы.

person Frank Castle    schedule 27.09.2014