Как повторно использовать event.preventDefault? - программирование

Как повторно использовать event.preventDefault?

У меня есть веб-страница, на которой я запретил действие по умолчанию для всех кнопок отправки, однако я хотел бы снова включить действие отправки по умолчанию на кнопке, как я могу это сделать?

В настоящее время я предотвращаю действие по умолчанию, используя следующее:

$("form").bind("submit", function(e){
e.preventDefault();
});

Я успешно сделал это, используя следующее:

$(document).ready(function(){
$("form:not('#press')").bind("submit", function(e){
e.preventDefault();
});

Но могу ли я сделать это динамически при нажатии кнопки?

4b9b3361

Ответ 1

Вам нужно было бы отменить событие и переподключить к отдельному событию, которое не предотвратитDefault, или просто вызовет событие по умолчанию самостоятельно позже в методе после развязки. Нет волшебного события. Cancelled = false;

Как запрошено

 $('form').submit( function(ev){

         ev.preventDefault();

         //later you decide you want to submit
         $(this).unbind('submit').submit()

  });

Ответ 2

Либо вы делаете то, что redsquare предлагает с помощью этого кода:

function preventDefault(e) {
    e.preventDefault();
}
$("form").bind("submit", preventDefault);

// later, now switching back
$("form#foo").unbind("submit", preventDefault);

Или вы назначаете атрибут формы всякий раз, когда разрешается отправка. Что-то вроде этого:

function preventDefault(e) {
    if (event.currentTarget.allowDefault) {
        return;
    }
    e.preventDefault();
}
$("form").bind("submit", preventDefault);

// later, now allowing submissions on the form
$("form#foo").get(0).allowDefault = true;

Ответ 3

$('form').submit( function(e){

     e.preventDefault();

     //later you decide you want to submit
     $(this).trigger('submit');     or     $(this).trigger('anyEvent');

Ответ 4

function(e){ e.preventDefault();

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

function(e){ return true; }

ура!

Ответ 5

С асинхронными действиями (таймеры, ajax) вы можете переопределить свойство isDefaultPrevented следующим образом:

$('a').click(function(evt){
  e.preventDefault();

  // in async handler (ajax/timer) do these actions:
  setTimeout(function(){
    // override prevented flag to prevent jquery from discarding event
    evt.isDefaultPrevented = function(){ return false; }
    // retrigger with the exactly same event data
    $(this).trigger(evt);
  }, 1000);
}

Это самый полный способ перезапуска события с точно такими же данными.

Ответ 6

Вы можете повторно активировать действия, добавив

this.delegateEvents();  // Re-activates the events for all the buttons

Если вы добавите его в функцию рендеринга представлений jb магистральной сети, тогда вы можете использовать event.preventDefault() по мере необходимости.