Почему это не работает? - PullRequest
       10

Почему это не работает?

8 голосов
/ 30 апреля 2009

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

<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);">

Ответы [ 5 ]

11 голосов
/ 30 апреля 2009

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

5 голосов
/ 30 апреля 2009

Никто не должен смешивать свою разметку с кодом взаимодействия, если они используют 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 параметров в разметке.

3 голосов
/ 25 декабря 2010

Вы можете отменить привязку следующим образом: p

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

1 голос
/ 17 ноября 2011

Существует ошибка с действиями bind, unbind и submit:

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

1 голос
/ 30 апреля 2009

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

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

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...