Можно определить почти все функции 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;
}
Я не уверен, что вы имеете в виду удалить все события . Удалить все обработчики для определенного типа событий или всех обработчиков событий для одного типа?
Если вы хотите удалить все обработчики событий (любого типа), вы мог клонировать элемент и заменить его своим клоном:
var clone = element.cloneNode();
while (element.firstChild) {
clone.appendChild(element.lastChild);
}
element.parentNode.replaceChild(clone, element);
Примечание: Это сохранит атрибуты и дочерние элементы, но не сохранит никаких изменений в свойствах DOM.
. Другой способ - использовать removeEventListener()
, но я думаю, вы уже пробовали это, и он не сделал Не работай. Вот улов :
Вызов
blockquote>addEventListener
для анонимной функции создает новый слушатель каждый раз. ВызовremoveEventListener
анонимной функции не влияет. Анонимная функция создает уникальный объект каждый раз, когда вызывается, это не ссылка на существующий объект, хотя он может именовать один. При добавлении слушателя событий таким образом убедитесь, что он добавлен только один раз, он является постоянным (не может быть удален) до тех пор, пока объект, к которому он был добавлен, не будет уничтожен.анонимная функция
addEventListener
, когда функцияeventReturner
возвращает функцию.Вы должны решить это:
- Не использовать функцию, возвращающую функцию , Используйте функцию напрямую:
function handler() { dosomething(); } div.addEventListener('click',handler,false);
- Создайте обертку для
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')
Примечание. Если ваш код работает в течение длительного времени, и вы создаете и удаляете множество элементов, вам нужно будет удалить элементы, содержащиеся в
_eventHandlers
, когда вы их уничтожите.
Удаление всех событий на 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()
})
}
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
Как утверждает 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) }
)
}
Я наткнулся на это сообщение, пытаясь отключить раздражающую защиту от копирования новостной сайт.
Наслаждайтесь!
Возможно, браузер сделает это за вас, если вы сделаете что-то вроде:
Скопируйте div
и его атрибуты и вставьте его перед старым, затем переместите содержимое со старого на новый и удалить старый?
Это приведет к удалению всех слушателей от детей, но будет медленным для больших страниц. Жестко просто писать.
element.outerHTML = element.outerHTML;
Используйте собственную функцию прослушивателя событий remove()
. Например:
getEventListeners().click.forEach((e)=>{e.remove()})