Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как узнать есть ли событие у элемента (https://javascript.ru/forum/events/71001-kak-uznat-est-li-sobytie-u-ehlementa.html)

милт 17.10.2017 22:37

Как узнать есть ли событие у элемента
 
Существует некий элемент у которого предположительно есть или нет события onclick или ondblclick или возможно onmousedown. Как программно узнать есть ли событие у элемента? По возможности, без использования jQuery.

ksa 18.10.2017 08:38

Цитата:

Сообщение от милт
Как программно узнать есть ли событие у элемента?

Как вариант...

<button>Test</button>
<script type='text/javascript'>
var o=document.getElementsByTagName('button')[0];
o.addEventListener('click',function(){
	alert(1);
});
if (o.click){
	alert('Есть click');
} else {
	alert('Нет click');
};
</script>

рони 18.10.2017 08:50

ksa,
как получить alert('Нет click')???

ksa 18.10.2017 09:54

Цитата:

Сообщение от рони
как получить alert('Нет click')?

Дааа... :cray:
Фокус не удался - факир был пьян. (с)

ruslan_mart 18.10.2017 09:59

Если событие, которое вешается как "свойство" через префикс "on", то прям так и проверяйте:

if(elem.onclick) {
   //...
}


Если же, наличие обработчика в listener, то - никак, только если проксировать addEventListener/removeEventListener:

//Вставить перед всеми скриптами
(function() {
	var proto = HTMLElement.prototype,
		addEventListener = proto.addEventListener,
		removeEventListener = proto.removeEventListener;

	proto.addEventListener = function(type, callback, useCapture) {
		if(!this._listeners) {
			this._listeners = {};
		}
		if(!(type in this._listeners)) {
			this._listeners[type] = [];
		}

		if(this._listeners[type].indexOf(callback) === -1) {
			this._listeners[type].push(callback);
		}

		addEventListener.call(this, type, callback, useCapture);
	};

	proto.removeEventListener = function(type, callback, useCapture) {
		var index = this._listeners && type in this._listeners ? this._listeners[type].indexOf(callback) : -1;

		if(index !== -1) {
			this._listeners[type].splice(index, 1);
		}

		removeEventListener.call(this, type, callback, useCapture);
	};

	proto.hasEventListener = function(type) {
		return !!(this._listeners && type in this._listeners && this._listeners[type].length || typeof this['on' + type] === 'function');
	};
})();



var hasClick = myElem.hasEventListener('click');
var hasDblclick = myElem.hasEventListener('dblclick');
var hasMouseDown = myElem.hasEventListener('mousedown');


Часовой пояс GMT +3, время: 17:49.