jQuery: form.submit (fn) не работает с Asp.net? - PullRequest
4 голосов
/ 15 января 2010

Я пытаюсь прикрепить обработчик событий к form.submit на страницах с отображением asp.net, но безуспешно Я хочу перехватить каждый постбэк и док. говорит, что я должен быть в состоянии. Я что-то не так делаю?

$(document).ready(function() {
    $("form").submit(function() {
            alert('Form submit');
            debugger;
    });
});

Ответы [ 3 ]

6 голосов
/ 22 декабря 2010

Не знаю, ищете ли вы его по-прежнему, но вот решение, которое у меня есть. Я не думаю, что это работает с отменой событий, если использовать, скажем, stopPropagation (), но это позволит вам запустить некоторый скрипт перед отправкой формы.

<script type="text/javascript">
    $(function () {
        var oldSubmit = __doPostBack;
        var newSubmit = function (eventTarget, eventArgument) {
            alert('custom submit function');
            return oldSubmit(eventTarget, eventArgument);
        };
        __doPostBack = newSubmit;
    });
</script>
4 голосов
/ 01 февраля 2014

Это то, что я сделал в устаревшем приложении WebForm:

//trigger jquery form submit event handlers on __doPostBack
$(function() {
    var oldPostBack = __doPostBack;
    __doPostBack = function() {
        $("form").triggerHandler("submit");
        oldPostBack.apply(this, arguments);
    };
});

Это позволяет вам связывать события с помощью jQuery, как обычно:

$("#myForm").submit(function() { alert("submitted!"); });

Типичный угон doPostBack, но только один раз. Он запускает обработчики «submit» для любых элементов формы перед выполнением старой обратной передачи. Это необходимо, потому что, пока asp.net вызывает функцию onsubmit, присоединенную к объекту dom формы , это не похоже на то, как события jquery работают таким образом.

3 голосов
/ 15 января 2010

веб-формы asp.net, как правило, заключены в одну большую форму (отсюда и термин веб-формы).

если я не ошибаюсь, все ссылки и кнопки отправки вызывают __doPostBack вручную, поэтому он обходит вызывающую форму отправки и передает эту ответственность функции __doPostBack.

вам, вероятно, потребуется перезаписать эту функцию.

<script type="text/javascript"> 
//<![CDATA[
var theForm = document.forms['aspnetForm'];
if (!theForm) {
    theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script> 

хотя я пытаюсь понять твой "отладчик"; линия в вашей функции. возможно, так и должно быть?

$(document).ready(function() {
    $("form").submit(function() {
            alert('Form submit');
    });
}); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...