Отключить все события кликов на странице (javascript)
Самый простой способ временно отключить все события щелчка мыши/перетаскивания и т.д. через javascript?
Я думал, что могу сделать document.onclick = function() { return false; };
... и т.д., но это не работает.
Ответы
Ответ 1
Если цель состоит в том, чтобы отключить клик на всей странице, вы можете сделать что-то вроде этого
document.addEventListener("click",handler,true);
function handler(e){
e.stopPropagation();
e.preventDefault();
}
истинный аргумент в addEventListener гарантирует, что обработчик будет выполнен на этапе захвата события. Если щелчок на любом элементе сначала будет захвачен в документе, а слушатель для события щелчка документа будет выполнен первым перед слушателем для любого другого элемента. Трюк здесь заключается в том, чтобы остановить событие от дальнейшего распространения до элементов ниже, тем самым прекратив процесс отправки, чтобы убедиться, что событие не достигло цели.
Также вам необходимо явно отключить поведение по умолчанию, связанное с элементами события, поскольку они будут выполняться по умолчанию после завершения процесса отправки, даже если событие было остановлено, распространяющееся дальше сверху
Его можно дополнительно модифицировать, чтобы использовать выборочно.
function handler(e){
if(e.target.className=="class_name"){
e.stopPropagation();
e.preventDefault();
}
Обработчик модифицированный таким образом, отключил бы клики только для элементов с классом class_name.
function handler(e){
if(e.target.className!=="class_name")
e.stopPropagation()
}
это позволит использовать клики только для элементов с классом class_name.
Надеюсь, это помогло:)
Ответ 2
Если вы не хотите абсолютно ничего перетаскивать/кликать, отключая ввод в поля ввода и т.д., я бы подумал о том, чтобы показать абсолютно позиционированный прозрачный div по всей странице, так что каждый щелчок будет на div, который ничего не сделает. Это даст вам быстрое и аккуратное включение и выключение этого клика, без необходимости регистрировать кучи слушателей.
Ответ 3
Если onclick = null был выполнен, как отменить событие onclick для нормального функционирования.. или
<a href="www.somesite.com" onclick="return yourFunction(this)">Link text</a>
<script type="text/javascript">
function yourFunction(anchor)
{ if(anchor.disabled) return;
/* Your function here */
}
</script>
Ответ 4
Эта статья, вероятно, будет полезна:
http://www.computerhowtoguy.com/how-to-use-the-jquery-unbind-method-on-all-child-elements/
В частности, речь идет о рекурсивной функции, которая удаляет все события кликов. Помните, что jQuery удалит события щелчка, если событие click было создано с помощью jQuery. функция, данная в статье, удалит как созданные jQuery, так и те, которые не были. Предоставляемая функция такова:
function RecursiveUnbind($jElement) {
// remove this element and all of its children click events
$jElement.unbind();
$jElement.removeAttr('onclick');
$jElement.children().each(function () {
RecursiveUnbind($(this));
});
}
Вы вызывали бы функцию следующим образом:
RecursiveUnbind($('#container'));
Эта функция принимает параметр объекта jQuery, но вы можете легко изменить ее, чтобы передать строку как имя идентификатора элемента, или, как вам кажется, лучше.
Ответ 5
Победивший ответ работает хорошо, но если вы получили пропускное значение true
boolean, на данный момент вы хотите удалить слушателя, вы должны передать то же самое значение. В противном случае удаление слушателя не будет работать.
Пример:
дополнение слушателя
document.addEventListener('click', DisableClickOnPage.handler, true);
удаление слушателя
document.removeEventListener('click', DisableClickOnPage.handler, true);
Doc: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener
Ответ 6
как насчет изменения переменной и динамически отключить все mouseClicks?
var freezeClic = false; // just modify that variable to disable clics !
document.addEventListener("click", freezeClicFn, true);
function freezeClicFn(e) {
if (freezeClic) {
e.stopPropagation();
e.preventDefault();
}
}
В моем случае каждый раз, когда появляется экран "loader", я поворачиваю freezeClic на true и false, когда он fadeOut:)
Мне нравится, потому что он не отвязывает... и т.д., что может быть накладным для просто отключения клика в течение нескольких секунд.