Отключить все события кликов на странице (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:)

Мне нравится, потому что он не отвязывает... и т.д., что может быть накладным для просто отключения клика в течение нескольких секунд.