Вопрос

Я работаю над сценарием greasemonkey для gmail, где мне нужно сделать копию " Входящие " ссылка на сайт. Использование cloneNode работает нормально, но я думаю, что есть событие onclick, которое прикрепляется к нему во время выполнения. Итак, это вопрос из двух частей: 1. Есть ли способ увидеть, какие события привязаны к узлу? 2. Есть ли способ скопировать эти события? Самая близкая вещь, которую я нашел, была jQuery, и я еще не готов пойти туда. Спасибо!

Это было полезно?

Решение

<Ол>
  • Нет, если это не установлено с помощью атрибута onclick для элемента.
  • Ненадежно (вы можете скопировать атрибут onclick , но будет ли он продолжать работать, зависит от того, использовался ли он и чем он занимается).
  • Вам лучше добавить свой собственный обработчик click , а затем вызвать это событие на оригинале ... Или имитировать поведение другим способом.

    Другие советы

    Я думаю, что мы можем решить эту проблему, используя эту теорию:

    У нас есть NodeList в JS, также называемый liveLists. Мы можем проверять всякий раз, когда изменяется их длина, добавляя нужные общие события в новый элемент списка в (length-1).

    Что сказать ....

    Вот пример использования Nodelist для добавления событий.

    <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>
    
    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top