Как только я запустил evt.preventDefault()
, как я могу снова возобновить действия по умолчанию?
Что противоположно evt.preventDefault();
Ответ 1
Как прокомментировал @Prescott, противоположность:
evt.preventDefault();
Может быть:
По существу приравнивая "делать по умолчанию", поскольку мы больше не предотвращаем его.
В противном случае я склонен указать вас на ответы, предоставленные другими комментариями и ответами:
Как отключить прослушиватель, вызывающий event.preventDefault() (используя jQuery)?
Как повторно установить event.preventDefault?
Обратите внимание, что вторая была принята с примерным решением, заданным redsquare (отправлено здесь для прямого решения, если оно не закрыто как дубликат):
$('form').submit( function(ev) {
ev.preventDefault();
//later you decide you want to submit
$(this).unbind('submit').submit()
});
Ответ 2
function(evt) {evt.preventDefault();}
и его противоположность
function(evt) {return true;}
ура!
Ответ 3
Для обработки команды перед продолжением ссылки из события click
в jQuery:
Например: <a href="http://google.com/" class="myevent">Click me</a>
Предотвратите и выполните с помощью jQuery:
$('a.myevent').click(function(event) {
event.preventDefault();
// Do my commands
if( myEventThingFirst() )
{
// then redirect to original location
window.location = this.href;
}
else
{
alert("Couldn't do my thing first");
}
});
Или просто запустите window.location = this.href;
после preventDefault();
Ответ 4
Мне пришлось отложить отправку формы в jQuery, чтобы выполнить асинхронный вызов. Здесь упрощенный код...
$("$theform").submit(function(e) {
e.preventDefault();
var $this = $(this);
$.ajax('/path/to/script.php',
{
type: "POST",
data: { value: $("#input_control").val() }
}).done(function(response) {
$this.unbind('submit').submit();
});
});
Ответ 5
ОК! он работает для события click:
$("#submit").click(function(e){
e.preventDefault();
-> block the click of the sumbit ... do what you want
$("#submit").unbind('click').click(); // the html click submit work now !
});
Ответ 6
event.preventDefault(); //or event.returnValue = false;
и его противоположность (стандартная):
event.returnValue = true;
источник: https://developer.mozilla.org/en-US/docs/Web/API/Event/returnValue
Ответ 7
Я бы предложил следующий шаблон:
document.getElementById("foo").onsubmit = function(e) {
if (document.getElementById("test").value == "test") {
return true;
} else {
e.preventDefault();
}
}
<form id="foo">
<input id="test"/>
<input type="submit"/>
</form>
... если я что-то не хватает.
Ответ 8
Нет противоположного метода event.preventDefault()
чтобы понять, почему вы сначала должны посмотреть, что event.preventDefault()
при его вызове.
Под капотом, функция для protectDefault по существу вызывает возврат false, который останавливает любое дальнейшее выполнение. Если вы знакомы со старыми способами Javascript, было когда-то в моде использовать return false для отмены событий в таких вещах, как отправка формы и кнопки, используя return true (до того, как jQuery появился даже вокруг).
Как вы, возможно, уже разработали, основываясь на простом объяснении выше: противоположность event.preventDefault()
- ничто. Вы просто не предотвращаете событие, по умолчанию браузер разрешит событие, если вы не предотвращаете его.
Смотрите объяснение ниже:
;(function($, window, document, undefined)) {
$(function() {
// By default deny the submit
var allowSubmit = false;
$("#someform").on("submit", function(event) {
if (!allowSubmit) {
event.preventDefault();
// Your code logic in here (maybe form validation or something)
// Then you set allowSubmit to true so this code is bypassed
allowSubmit = true;
}
});
});
})(jQuery, window, document);
В приведенном выше коде вы заметите, что мы проверяем, имеет ли значение allowSubmit значение false. Это означает, что мы не event.preventDefault
нашей формы с использованием event.preventDefault
а затем выполним некоторую логику проверки и, если нас устраивает, установите для allowSubmit значение true.
Это действительно единственный эффективный способ сделать противоположное event.preventDefault()
- вы также можете попробовать удалить события, которые по сути достигли бы того же самого.
Ответ 9
Я полагаю, что "противоположность" будет моделировать событие. Вы можете использовать .createEvent()
Следующий пример Mozilla:
function simulateClick() {
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
var cb = document.getElementById("checkbox");
var cancelled = !cb.dispatchEvent(evt);
if(cancelled) {
// A handler called preventDefault
alert("cancelled");
} else {
// None of the handlers called preventDefault
alert("not cancelled");
}
}
Ссылка: document.createEvent
В jQuery есть .trigger()
поэтому вы можете запускать события для элементов - иногда это полезно.
$('#foo').bind('click', function() {
alert($(this).text());
});
$('#foo').trigger('click');
Ответ 10
Вот что я использовал для его установки:
$("body").on('touchmove', function(e){
e.preventDefault();
});
И отменить это:
$("body").unbind("touchmove");
Ответ 11
jquery on() может быть другим решением. escpacially, когда речь заходит о пространствах имен.
jquery on() - это только текущий способ привязки событий (вместо bind()). off() - отменить их. и когда вы используете пространство имен, вы можете добавлять и удалять несколько разных событий.
$( selector ).on("submit.my-namespace", function( event ) {
//prevent the event
event.preventDefault();
//cache the selector
var $this = $(this);
if ( my_condition_is_true ) {
//when 'my_condition_is_true' is met, the binding is removed and the event is triggered again.
$this.off("submit.my-namespace").trigger("submit");
}
});
теперь с использованием пространства имен вы можете добавить несколько из этих событий и сможете их удалить, в зависимости от ваших потребностей. В то время как submit может быть не лучшим примером, это может пригодиться при нажатии или нажатии клавиши или любой..
Ответ 12
Здесь что-то полезное...
Прежде всего, мы перейдем по ссылке, запустим некоторый код, а затем выполним действие по умолчанию. Это будет возможно с помощью event.currentTarget. Посмотрите. Здесь мы попытаемся получить доступ к Google на новой вкладке, но прежде чем нам нужно будет запустить некоторый код.
<a href="https://www.google.com.br" target="_blank" id="link">Google</a>
<script type="text/javascript">
$(document).ready(function() {
$("#link").click(function(e) {
// Prevent default action
e.preventDefault();
// Here you'll put your code, what you want to execute before default action
alert(123);
// Prevent infinite loop
$(this).unbind('click');
// Execute default action
e.currentTarget.click();
});
});
</script>
Ответ 13
вы можете использовать это после метода "preventDefault"
//Здесь evt.target возвращает событие по умолчанию (например: defult url и т.д.)
var defaultEvent=evt.target;
//Здесь мы сохраняем событие по умолчанию.
if("true")
{
//activate default event..
location.href(defaultEvent);
}
Ответ 14
Вы всегда можете использовать это прикрепленное к событию click в своем script:
location.href = this.href;
Пример использования:
jQuery('a').click(function(e) {
location.href = this.href;
});
Ответ 15
Это не работает для меня
Я связываю событие, чтобы остановить отправку формы
form.addEventListener('submit', function(evt) {
evt.preventDefault();
return false;
});
И после того, как все проверки соответствовали, я попытался отменить следующее
form.removeEventListener('submit', function(evt) {
evt.preventDefault = false;
//// Also, evt.preventDefault(); doesn't work
return true;
});
Ответ 16
Ни одно из решений не помогло мне здесь, и я сделал это, чтобы решить мою ситуацию.
<a onclick="return clickEvent(event);" href="/contact-us">
И функция clickEvent()
,
function clickEvent(event) {
event.preventDefault();
// do your thing here
// remove the onclick event trigger and continue with the event
event.target.parentElement.onclick = null;
event.target.parentElement.click();
}
Ответ 17
Теперь есть e.stopPropagation()
Ответ 18
Я использовал следующий код. Это отлично работает для меня.
$('a').bind('click', function(e) {
e.stopPropagation();
});
Ответ 19
этот код работал у меня для повторного создания события после того, как я использовал:
event.preventDefault(); to disable the event.
event.preventDefault = false;