Вопрос

Я пытаюсь ответить этот вопрос несколько минут назад и подготовил для себя этот пример:

<script>
  function trialMethod()
  {
    alert('On Submit Run!'); return true;
  }
  function trialMethod2()
  {
    alert('On Submit Run trialMethod2!'); return true;
  }
</script>

<form id="aspnetForm" onsubmit="trialMethod();">
    <input type="submit">
</form>

Почему первая отвязка не работает:

<input type="button" id="btnTrial1" value="UNBIND 1" 
   onclick="$('#aspnetForm').unbind('submit', trialMethod);">

Но это работает для метода TrialMethod2:

<input type="button" id="btnTrial2" value="UNBIND 2" 
   onclick="$('#aspnetForm').bind('submit', trialMethod2).unbind('submit', trialMethod2);">
Это было полезно?

Решение

Первый сценарий отмены привязки не работает из-за модели событий jQuery.jQuery хранит каждую функцию обработчика событий в массиве, к которому вы можете получить доступ через $("#foo").data('events')unbind функция ищет только данную функцию в этом массиве.Итак, вы можете только unbind() обработчики событий, которые были добавлены с помощью bind()

Другие советы

Никто никогда не должен смешивать свою разметку с кодом взаимодействия, если он использует jQuery.

Добавьте на страницу немного JavaScript, например:

$(function() {
    $('#aspnetForm').bind('submit',function() {
        trialMethod();
    });
    $('#btnTrial2').bind('click',function() {
        $('#aspnetForm').unbind('submit');
    });
    $('#btnTrial2').bind('click',function() {
        $('#aspnetForm').bind('submit', trialMethod2).unbind('submit');
    });
});

Теперь, с этим покончено...Теперь все должно работать (хотя теперь вы будете выполнять двойную привязку #aspnetForm перед тем, как полностью отвязать его при нажатии второй кнопки).Проблема заключалась в том, что форма изначально никогда не была «связанной».Вы можете отвязать onsubmit параметры в разметке.

Отвязать можно, удалив соответствующий атрибут:

 $('#aspnetForm').removeAttr('onsubmit');

Я уже сталкивался с подобной проблемой.Я пришел к выводу, что вы можете отменить привязку только того метода, который вы связали.Поскольку метод Trialmethod() НЕ был привязан через jquery, вызов метода unbind не будет работать.

Пожалуйста, дайте нам знать, если вы случайно это поймете.

Спасибо.

Существует ошибка с действием привязки, отмены привязки и отправки формы:

Если вы привязываете, а затем отменяете привязку и хотите отправить форму, вы не можете использовать $(form).submit(), НО $(form INPUT[type=submit]).click() !

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top