Я получаю сообщение об ошибке Uncaught TypeError: Невозможно установить свойство 'onclick' для null - PullRequest
0 голосов
/ 19 октября 2018

У меня есть код обмена на пользовательскую кнопку Facebook.Я получаю эту ошибку:

Uncaught TypeError: Невозможно установить свойство 'onclick' для null в консоли.

    document.getElementById('piggy-bank-fb-shear-btn', 'piggy-bank-fb-shear-btn-2').onclick = function () {
    FB.ui({
        method: 'share',
        display: 'popup',
        app_id: '{827182594132839}',
        href: window.fbSheareUrl,
    }, function (response) {
        debugger;
        if (response && !response.error_message) {
            var element = document.getElementById("attach-email");
            element.style.display = "block";
            document.getElementById('close','close2').click();
        }
        else {
            var element = document.getElementById("attach-email");
            document.getElementById('close', 'close2').click();
            element.style.display = "block";
            document.getElementById('share-poup-text').innerHTML = getLanguageWordByKey('PiggyBankShareUnsuccessfulPopUp');
            element.classList.remove("mystyle");
            document.getElementById('piggy-share-icon').classList.remove('email-success');
            document.getElementById('piggy-share-icon').classList.add('email-failed');

        }
    });
}

scrtipt подразумевается в конце html-документа.

Ответы [ 5 ]

0 голосов
/ 19 октября 2018

getElementById() поддерживает только один параметр, поэтому вы можете получить только один элемент обратно.

Так что либо вы получаете ваши элементы один за другим, как это:

document.getElementById('piggy-bank-fb-shear-btn').onclick = function() { // stuff }
document.getElementById('piggy-bank-fb-shear-btn-2').onclick = function() { // stuff }

, либо вы делаете это через querySelectorAll(), который поддерживает более одного параметра.

var elements = document.querySelector('#piggy-bank-fb-shear-btn, #piggy-bank-fb-shear-btn-2');

Но теперь вы не можете просто добавить onclick в конце запроса, потому что querySelectorAll() вернул несколько элементов, так называемый NodeList.Из-за этого вам нужно будет перебрать вашу коллекцию под названием elements:

for (var i = 0; i < elements.length; i++) {
  elements[i].onclick = function() { // stuff }
}
0 голосов
/ 19 октября 2018

document.getElementById имеет только один параметр, вам нужно изменить это в своем коде:

document.getElementById('piggy-bank-fb-shear-btn').onclick = function;
document.getElementById('piggy-bank-fb-shear-btn-2').onclick = function;


// Maybe you will prefer to use Jquery which you can use:

$('#piggy-bank-fb-shear-btn, #piggy-bank-fb-shear-btn-2').on('click', function() {});
0 голосов
/ 19 октября 2018

Сразу вы можете получить один элемент, используя document.getElementById.Таким образом, вы можете хранить id элементов внутри массива и присоединять к нему прослушиватель событий

['piggy-bank-fb-shear-btn', 'piggy-bank-fb-shear-btn-2'].forEach(function(item){
 document.getElementById(item).onclick==//rest of code
})
0 голосов
/ 19 октября 2018
var clickfnc = function() {

}

document.getElementById('piggy-bank-fb-shear-btn').onclick =clickfnc 
document.getElementById('piggy-bank-fb-shear-btn-2').onclick =clickfnc 
0 голосов
/ 19 октября 2018

Ошибка в вашей первой строке:

document.getElementById('piggy-bank-fb-shear-btn', 'piggy-bank-fb-shear-btn-2')

document.getElementById() поддерживает только один идентификатор за раз.

Используйте document.querySelectorAll(), если вы хотите использовать несколько идентификаторов вместо, который будет возвращать список узлов с указанными идентификаторами:
https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll

Альтернативно, если это возможно, вы также можете добавить общий класс к вашим элементам и нацелить этот класс с помощью document.getElementsByClassName(), который вернет список узлов с этим классом:
https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName

Для вашего примера:

var buttons = document.querySelectorAll('#piggy-bank-fb-shear-btn, #piggy-bank-fb-shear-btn-2');

Array.from(buttons).forEach(button => {
    button.addEventListener('click', function(event) {
         FB.ui({
          method: 'share',
          display: 'popup',
          app_id: '{827182594132839}',
          href: window.fbSheareUrl,
      }, function (response) {
          debugger;
          if (response && !response.error_message) {
              var element = document.getElementById("attach-email");
              element.style.display = "block";
              document.getElementById('close','close2').click();
          }
          else {
              var element = document.getElementById("attach-email");
              document.getElementById('close', 'close2').click();
              element.style.display = "block";
              document.getElementById('share-poup-text').innerHTML = getLanguageWordByKey('PiggyBankShareUnsuccessfulPopUp');
              element.classList.remove("mystyle");
              document.getElementById('piggy-share-icon').classList.remove('email-success');
              document.getElementById('piggy-share-icon').classList.add('email-failed');

          }
      });
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...