Удалить всех слушателей & ldquo; document & rdquo; элемент [дубликат]

Можно определить почти все функции mysql_ *, используя mysqli или PDO. Просто включите их поверх своего старого PHP-приложения, и он будет работать на PHP7. Мое решение здесь .

length : false;
}

function mysql_field_name($qlink, $offset) {
    $field = mysqli_fetch_field_direct($qlink, $offset);
    if (!is_object($field))
        return false;
    return empty($field->orgname) ? $field->name : $field->orgname;
}

function mysql_field_table($qlink, $offset) {
    $field = mysqli_fetch_field_direct($qlink, $offset);
    if (!is_object($field))
        return false;
    return empty($field->orgtable) ? $field->table : $field->orgtable;
}

function mysql_field_type($qlink, $offset) {
    $field = mysqli_fetch_field_direct($qlink, $offset);
    return is_object($field) ? $field->type : false;
}

function mysql_free_result($qlink) {
    try {
        mysqli_free_result($qlink);
    } catch (Exception $e) {
        return false;
    }
    return true;
}

53
задан Florian Müller 29 April 2013 в 14:22
поделиться

7 ответов

Я не уверен, что вы имеете в виду удалить все события . Удалить все обработчики для определенного типа событий или всех обработчиков событий для одного типа?

Удалить все обработчики событий

Если вы хотите удалить все обработчики событий (любого типа), вы мог клонировать элемент и заменить его своим клоном:

var clone = element.cloneNode();
while (element.firstChild) {
  clone.appendChild(element.lastChild);
}
element.parentNode.replaceChild(clone, element);

Примечание: Это сохранит атрибуты и дочерние элементы, но не сохранит никаких изменений в свойствах DOM.


Удалить «анонимные» обработчики событий определенного типа

. Другой способ - использовать removeEventListener() , но я думаю, вы уже пробовали это, и он не сделал Не работай. Вот улов :

Вызов addEventListener для анонимной функции создает новый слушатель каждый раз. Вызов removeEventListener анонимной функции не влияет. Анонимная функция создает уникальный объект каждый раз, когда вызывается, это не ссылка на существующий объект, хотя он может именовать один. При добавлении слушателя событий таким образом убедитесь, что он добавлен только один раз, он является постоянным (не может быть удален) до тех пор, пока объект, к которому он был добавлен, не будет уничтожен.

анонимная функция addEventListener, когда функция eventReturner возвращает функцию.

Вы должны решить это:

  1. Не использовать функцию, возвращающую функцию , Используйте функцию напрямую:
    function handler() {
        dosomething();
    }
    
    div.addEventListener('click',handler,false);
    
  2. Создайте обертку для addEventListener, которая хранит ссылку на возвращаемую функцию и создаст какую-то странную функцию removeAllEvents:
    var _eventHandlers = {}; // somewhere global
    
    function addListener(node, event, handler, capture) {
        if(!(node in _eventHandlers)) {
            // _eventHandlers stores references to nodes
            _eventHandlers[node] = {};
        }
        if(!(event in _eventHandlers[node])) {
            // each entry contains another entry for each event type
            _eventHandlers[node][event] = [];
        }
        // capture reference
        _eventHandlers[node][event].push([handler, capture]);
        node.addEventListener(event, handler, capture);
     }
    
    function removeAllListeners(node, event) {
        if(node in _eventHandlers) {
            var handlers = _eventHandlers[node];
            if(event in handlers) {
                var eventHandlers = handlers[event];
                for(var i = eventHandlers.length; i--;) {
                    var handler = eventHandlers[i];
                    node.removeEventListener(event, handler[0], handler[1]);
                }
            }
        }
    }
    
    И затем вы можете использовать ее с:
    addListener(div, 'click', eventReturner(), false)
    // and later
    removeListeners(div, 'click')
    

DEMO

Примечание. Если ваш код работает в течение длительного времени, и вы создаете и удаляете множество элементов, вам нужно будет удалить элементы, содержащиеся в _eventHandlers, когда вы их уничтожите.

65
ответ дан Felix Kling 31 August 2018 в 17:38
поделиться

Удаление всех событий на document:

Один лайнер:

for (key in getEventListeners(document)) { getEventListeners(document)[key].forEach(function(c) { c.remove() }) }

Довольно версия:

for (key in getEventListeners(document)) {
  getEventListeners(document)[key].forEach(function(c) {
    c.remove()
  })   
}
-1
ответ дан Dorian 31 August 2018 в 17:38
поделиться
var div = getElementsByTagName('div')[0]; /* first div found; you can use getElementById for more specific element */
div.onclick = null; // OR:
div.onclick = function(){};

// edit

Я не знал, какой метод вы используете для добавления событий. Для addEventListener вы можете использовать это:

div.removeEventListener('click',functionName,false); // functionName is the name of your callback function

more подробнее

0
ответ дан Ionuț Staicu 31 August 2018 в 17:38
поделиться

Как утверждает corwin.amber, существуют различия между Webkit и другими.

В Chrome:

getEventListeners(document);

Что дает вам объект со всеми существующими прослушивателями событий:

Object 
 click: Array[1]
 closePopups: Array[1]
 keyup: Array[1]
 mouseout: Array[1]
 mouseover: Array[1]
 ...

Здесь вы можете добраться до слушателя, которого хотите удалить:

getEventListeners(document).copy[0].remove();

Итак, все прослушиватели событий:

for(var eventType in getEventListeners(document)) {
   getEventListeners(document)[eventType].forEach(
      function(o) { o.remove(); }
   ) 
}

В Firefox

Немного отличается, потому что он использует оболочку прослушивателя, которая не содержит функции удаления. Вы должны получить слушателя, которого хотите удалить:

document.removeEventListener("copy", getEventListeners(document).copy[0].listener)

Все прослушиватели событий:

for(var eventType in getEventListeners(document)) {
  getEventListeners(document)[eventType].forEach(
    function(o) { document.removeEventListener(eventType, o.listener) }
  ) 
}

Я наткнулся на это сообщение, пытаясь отключить раздражающую защиту от копирования новостной сайт.

Наслаждайтесь!

6
ответ дан Jmakuc 31 August 2018 в 17:38
поделиться

Возможно, браузер сделает это за вас, если вы сделаете что-то вроде:

Скопируйте div и его атрибуты и вставьте его перед старым, затем переместите содержимое со старого на новый и удалить старый?

0
ответ дан Mic 31 August 2018 в 17:38
поделиться

Это приведет к удалению всех слушателей от детей, но будет медленным для больших страниц. Жестко просто писать.

element.outerHTML = element.outerHTML;
10
ответ дан pabombs 31 August 2018 в 17:38
поделиться

Используйте собственную функцию прослушивателя событий remove(). Например:

getEventListeners().click.forEach((e)=>{e.remove()})
22
ответ дан RJHunter 31 August 2018 в 17:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: