2013-06-15 2 views
2

Привет, мне нужно предотвратить действие по умолчанию, когда пользователь нажал на элемент и предотвратил его действие по умолчанию только за это время, и ему необходимо выполнить некоторые другие действия. Для которого я использовалУдаление preventDefault и stopPropagation в javascript

document.body.onclick = function (e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
} 

Но теперь проблема, после того, как я выполнения указанных выше действий, мне нужно удалить preventDefault и stopPropagation, потому что ни один из ссылки (A HREF) не становится срабатывает после этого. Итак, как отменить это после его выполнения? Обратите внимание, что это чистый код JavaScript, и я не использую какую-либо библиотеку, такую ​​как jquery. Поэтому я не могу использовать .bind и .unbind. Любая идея по этому поводу была бы весьма признательна.

ответ

1

Вы можете повторить поведение bind и unbind использованием addEventListener и removeEventListener

function stopIt(e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
} 

document.body.addEventListener("click", stopIt); 

// then later 

document.body.removeEventListener("click", stopIt); 

Примечание: IE < = 8 не поддерживает addEventListener и removeEventListener, поэтому вам необходимо использовать attachEvent, как упомянуто здесь - https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener#Compatibility

1

Не связывайте событие к телу, привязать событие к элементу вам нужно предотвратить:

document.getElementById('theTarget').onclick = function(e) { 
    // ... 
} 
1

Если я правильно понимаю ваше требование, я боюсь, что вы не можете отменить e.preventDefault();. Но по умолчанию функция обработчика будет выполнена перед выполнением действия по умолчанию. Так что в вашем случае вам просто не нужен e.preventDefault();. И не забудьте прислать слушателям мероприятия только <a> теги:

var aTags = document.getElementsByTagName("a"); 

for (var i=0;i<aTags.length;i++){ 
    aTags[i].onclick = function (e) { 
     // just perform your action here, don't need e.preventDefault(); 
    } 
} 
Смежные вопросы