У меня есть общий код кнопки для кнопки 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-документа встраивается скрипт.
Ошибка в вашей первой строке:
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');
}
});
});
});
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 }
}
Сразу вы можете получить один элемент, используя document.getElementById
. Таким образом, вы можете сохранить id
элементов внутри массива и присоединить к нему прослушиватель событий
['piggy-bank-fb-shear-btn', 'piggy-bank-fb-shear-btn-2'].forEach(function(item){
document.getElementById(item).onclick==//rest of code
})
var clickfnc = function() {
}
document.getElementById('piggy-bank-fb-shear-btn').onclick =clickfnc
document.getElementById('piggy-bank-fb-shear-btn-2').onclick =clickfnc
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() {});