Что является противоположностью evt.preventDefault (); - PullRequest
151 голосов
/ 13 апреля 2011

Как только я запустил evt.preventDefault(), как я могу возобновить действия по умолчанию?

Ответы [ 17 ]

80 голосов
/ 13 апреля 2011

Согласно комментарию @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()
});
51 голосов
/ 19 ноября 2011
function(evt) {evt.preventDefault();}

и его противоположность

function(evt) {return true;}

ура!

15 голосов
/ 20 июня 2014

Для обработки команды перед продолжением ссылки из события 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();

8 голосов
/ 26 декабря 2018
event.preventDefault(); //or event.returnValue = false;

и его противоположность (стандартная):

event.returnValue = true;

источник: https://developer.mozilla.org/en-US/docs/Web/API/Event/returnValue

6 голосов
/ 05 апреля 2013

Мне пришлось отложить отправку формы в 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();
    });
});
6 голосов
/ 28 июля 2016

ОК! это работает для события 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 !

});
4 голосов
/ 13 апреля 2011

Я бы предложил следующий шаблон:

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>

... если я что-то упустил.

http://jsfiddle.net/DdvcX/

4 голосов
/ 01 июня 2018

Нет противоположного метода 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, а затем выполним некоторую логику проверки и, если мы довольны, установим значение allowSubmit в значение true.

Это действительно единственный эффективный способ сделать противоположностьevent.preventDefault() - вы также можете попробовать удалить события, которые по сути достигли бы того же самого.

3 голосов
/ 14 июня 2018

Вот что-то полезное ...

Прежде всего, мы перейдем по ссылке, запустим некоторый код, а затем выполним действие по умолчанию.Это будет возможно при использовании 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>
2 голосов
/ 13 апреля 2011

Я полагаю, что «противоположным» было бы моделировать событие. Вы можете использовать .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');
...