Прикрепление к событию клика (с jQuery) на кнопке отправки убивает функцию отправки - PullRequest
1 голос
/ 06 августа 2010

Полный текст: я хочу отключить кнопку отправки в отправке формы, чтобы предотвратить многократную отправку. Одной из проблем является форма ASP.Net MVC Ajax-форма - <% using (Ajax.BeginForm ...%>), поэтому ее событие javascript onSubmit уже установлено, и поэтому я не могу сделать это во время этого события. способ добавить к событию submit с помощью jQuery? Мои тесты показывают, что $ ("# form"). submit (...) заменяет событие submit и, таким образом, убивает материал MVC для ajaxy .

Итак, что я сделал, так это прикрепил код отключения кнопки к событию нажатия кнопки отправки. Это работает нормально ... только это убивает способности отправки кнопки (ничего не происходит, кроме кнопки отключается). Я пошел дальше и использовал jQuery для отправки формы из события click. Это ничего не значит, ответ ajax возвращается в виде загруженного файла, я полагаю, потому что материал ajax MVC снова засорился. Вот где я нахожусь:

$("#submitButton").click(function ()
{
    var $button = $(this);
    $button.parent().submit();
    $button.attr("disabled", "disabled");
});

Кто-нибудь знает обходной путь?

Edit: Таким образом, оказывается, что это на самом деле может быть ошибка в MVC. Изначально у меня было:

<% using (Ajax.BeginForm("CreateAsync", "Account", new AjaxOptions
    {
        HttpMethod = "POST",
        OnComplete = "create_Complete",
        OnBegin = "create_Begin"
    },
    new { id = "ajaxForm" }))
{ %>
<!-- form stuff -->
<% } %>

$("#ajaxForm").submit(function() {
    $(":submit", this).attr("disabled", "disabled");
});

Обратите внимание, что я устанавливал идентификатор формы и привязывал к нему дескриптор jQuery через этот идентификатор. Похоже, тот простой факт, что я устанавливаю идентификатор формы, вызывает все проблемы. Фактически, я могу прервать отправку формы без какого-либо вмешательства jQuery, если я установлю идентификатор формы. Так что это работает полностью как рекламируется:

<% using (Ajax.BeginForm("CreateAsync", "Account", new AjaxOptions
    {
        HttpMethod = "POST",
        OnComplete = "create_Complete",
        OnBegin = "create_Begin"
    }))
{ %>
<!-- form stuff -->
<% } %>

$("form").submit(function() {
    $(":submit", this).attr("disabled", "disabled");
});

Ответы [ 2 ]

1 голос
/ 06 августа 2010

В основном что-то вроде

$("form").submit(function() {
    $(this).submit(function() { return false; });
    $(":submit", this).addClass("PseudoDisabled");
});

, прикрепленное к документу. Уже хорошо работает в нашем проекте.Поскольку вы не можете на самом деле отключить кнопку отправки, или обратная передача будет игнорироваться.В основном мы создали отключенный стиль, который применяется к SubSubmit, который создает видимость отключенного и предотвращает многократную отправку, добавив новый обработчик события submit.

0 голосов
/ 09 августа 2010

Оказывается, это была ошибка. См. Отредактированный вопрос для ответа.

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