JavaScript CLONENODE com eventos
-
03-07-2019 - |
Pergunta
Estou trabalhando em um script Greasemonkey para o Gmail, onde preciso fazer uma cópia do link "Caixa de entrada". O uso do CLONENODE funciona bem, mas acho que há um evento OnClick que se apega a ele em tempo de execução. Então, esta é uma pergunta de duas partes: 1. Existe uma maneira de ver quais eventos são anexados a um nó? 2. Existe uma maneira de copiar esses eventos também? A coisa mais próxima que encontrei foi o jQuery, e ainda não estou pronto para ir para lá. Obrigado!
Solução
- Não a menos que seja definido usando o
onclick
atributo no elemento. - Não de maneira confiável (você pode copiar o
onclick
atributo, mas se isso continuará a funcionar depende se fosse usado e o que faz).
É melhor adicionar o seu próprio click
manipulador, e depois acionando esse evento no original ... ou simulando o comportamento de alguma outra maneira.
Outras dicas
Acho que podemos resolver essas coisas usando essa teoria:
Temos o NodElist em JS, também chamado de Livelistas. Podemos verificar sempre que seu comprimento mudar, addevent os eventos comuns desejados para o novo elemento na lista em (comprimento-1).
O quê dizer....
Aqui está o exemplo usando o NodEList para adicionar eventos.
<body>
<div id="one" class="clones" style="background:red;width:100px;height:100px"></div>
</body>
<script>
//Selecor based live list [Advantage]
var nodeList = document.getElementsByClassName('clones')
//Common Function for nodelist
nodeList.addEvents = function(){
nodeList.item(nodeList.length-1).addEventListener('click',function(){
console.log(this.id);
});
}
nodeList.addEvents();
//Making Clone
var _clone = document.getElementsByTagName('div')[0].cloneNode(true);
//Changing Id
_clone.id="two"
document.body.appendChild(_clone);
nodeList.addEvents();
</script>