DOM 변경 사항을 확인해야합니다. 이 간단한 예제 MutationObserver()
객체를 사용
(참고 : 나는 '특정'버튼을 당신이 의미 한 것을 알 수 없습니다.)
var body = document.getElementsByTagName('body')[0];
var buttons = [];
/**
* When a button is clicked
*/
function buttonClickEvent() {
this.className = this.className === 'active' ? '' : 'active';
}
/**
* Iterate each button in the 'buttons' {Array}.
* if callback returns false, the loop breaks.
*/
function filterButtons(callback) {
for (var i = 0, btn; (btn = buttons[i++]) && (callback(btn) !== false););
}
/**
* Update buttons in certain collections.
* @param {HTMLCollection, else ...} addedNodes
* @param {HTMLCollection, else ...} removedNodes
* @param {Boolean} ignoreBtnCheck
*/
function updateButtons(addedNodes, removedNodes, ignoreBtnCheck) {
for (var i = 0, el; el = addedNodes[i++];) {
if (ignoreBtnCheck || el.tagName.toUpperCase() === 'BUTTON') {
var found = false;
filterButtons(function(btn) {
if (btn === el) {
found = true;
return false;
}
});
if (!found) {
el.addEventListener('click', buttonClickEvent);
buttons.push(el);
}
}
}
for (i = 0; el = removedNodes[i++];) {
if (el.tagName.toUpperCase() === 'BUTTON') {
filterButtons(function(btn) {
if (btn === el) {
buttons.splice(i, 1);
return false;
}
});
}
}
}
/**
* Create a 'MutationObserver' to handle
events like DOMInsertedNode, etc.
*/
var observer = new MutationObserver(function(mutations, observer) {
if (mutations[0].addedNodes.length || mutations[0].removedNodes.length)
updateButtons(mutations[0].addedNodes, mutations[0].removedNodes);
});
/**
* Observe DOM changes in 'body'.
*/
observer.observe(body, { childList: true, subtree: true });
/**
* Update at least once each button in 'body'
*/
updateButtons(body.getElementsByTagName('button'), [], true);
가장 쉬운 방법은 함수를 시작하는 모든 버튼에 클래스를 추가하는 것이 아닙니다. 그렇지 않으면 html 태그'onclick = ""'을 사용할 수 있습니다. 다음은 그 예입니다 : http://www.w3schools.com/jsref/event_onclick.asp. 또 다른 방법은 버튼 ('$ ("button"). on ("click", function() {});}에서 클릭을 듣고 주어진 클래스 나 id가 미리 정의 된 목록에 있는지 확인하는 것입니다. – user3528269
'onClick' 코드를 추가 할 수 있다면 코드에 의해 영향을받는 여러 개의 버튼을 식별 할 수있는'class'를 추가 할 수 있습니까? – haxxxton
현재의 셋업에서, 나는 React를 사용하고 있는데, 이것은 onClick을 사용하도록 장려하고 있습니다.하지만 React가 없어도 전에 건너 왔던 문제입니다. 클래스에 대한 아이디어는 작동하지만 여전히 함수 나 onClick 하나보다 변경하기가 어려운 불필요한 단계를 추가하는 것처럼 보입니다. 특히 수백 개의 가능한 버튼으로 작업하는 경우 더욱 그렇습니다. –