Самый простой способ временно отключить все события щелчка мыши/перетаскивания и т.д. через javascript?
Я думал, что могу сделать document.onclick = function() { return false; };
... и т.д., но это не работает.
Самый простой способ временно отключить все события щелчка мыши/перетаскивания и т.д. через javascript?
Я думал, что могу сделать document.onclick = function() { return false; };
... и т.д., но это не работает.
Если цель состоит в том, чтобы отключить клик на всей странице, вы можете сделать что-то вроде этого
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. Надеюсь, это помогло:)
Если вы не хотите абсолютно ничего перетаскивать/кликать, отключая ввод в поля ввода и т.д., я бы подумал о том, чтобы показать абсолютно позиционированный прозрачный div по всей странице, так что каждый щелчок будет на div, который ничего не сделает. Это даст вам быстрое и аккуратное включение и выключение этого клика, без необходимости регистрировать кучи слушателей.
Если 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>
Эта статья, вероятно, будет полезна:
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, но вы можете легко изменить ее, чтобы передать строку как имя идентификатора элемента, или, как вам кажется, лучше.
Победивший ответ работает хорошо, но если вы получили пропускное значение 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
как насчет изменения переменной и динамически отключить все 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:)
Мне нравится, потому что он не отвязывает... и т.д., что может быть накладным для просто отключения клика в течение нескольких секунд.