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

1

У меня есть общий код кнопки для кнопки 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');

        }
    });
}

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

Теги:

5 ответов

2
Лучший ответ

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

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

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

Используйте 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');

          }
      });
    });
});
  • 0
    document.querySelectorAll ('piggy-bank-fb-shear-btn', 'piggy-bank-fb-shear-btn-2'). onclick = function ()
  • 0
    ошибка ушла, но кнопки теперь не работают
Показать ещё 1 комментарий
0

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 коллекции, называемые elements:

for (var i = 0; i < elements.length; i++) {
  elements[i].onclick = function() { // stuff }
}
0

Сразу вы можете получить один элемент, используя 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
var clickfnc = function() {

}

document.getElementById('piggy-bank-fb-shear-btn').onclick =clickfnc 
document.getElementById('piggy-bank-fb-shear-btn-2').onclick =clickfnc 
  • 0
    Спасибо за этот фрагмент кода, который может оказать некоторую ограниченную, немедленную помощь. Правильное объяснение значительно улучшило бы его долгосрочную ценность , показав, почему это хорошее решение проблемы, и сделало бы его более полезным для будущих читателей с другими, похожими вопросами. Пожалуйста, измените свой ответ, чтобы добавить некоторые объяснения, в том числе предположения, которые вы сделали.
0

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() {});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню