Как получить событие onSubmit для формы? - PullRequest
8 голосов
/ 02 апреля 2009

Я хочу знать, как извлечь событие onsubmit из формы, чтобы выполнить некоторую проверку формы, потому что у меня нет прямого доступа к нему. (Я пишу плагин Wordpress для комментариев, поэтому у меня нет прямого доступа к тегу формы или кнопке отправки.)

Я так расстроился, пытаясь сделать это для своего плагина, что написал ниже версию Hello World. Я хочу, чтобы при загрузке страницы отображалось предупреждение «Hello World», а при нажатии кнопки «Отправить» - предупреждение «Форма отправлена». Вместо этого он показывает оба всплывающих окна при загрузке страницы.

Вот мой код:

  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <title>Hello World</title>
    </head>
    <body>
    <h2>Test</h2>
    <form action="#" method="post" id="commentform">

    <p><input type="text" name="author" id="author" size="22" tabindex="1" />
    <label for="author"><small>Name (required)</small></label></p>

    <p><input name="submit" type="submit" id="submit" tabindex="5" value="Submit Comment" />

    </form>

    <script type="text/JavaScript">
    <!--
    alert("Hello world");

    var formCheck = document.getElementById("commentform");

    formCheck.onSubmit = doMapping(); 

    function doMapping() {
        alert("form submitted");
        return false;
    }

    -->
    </script>     

    </body>
    </html> 

Ответы [ 3 ]

12 голосов
/ 02 апреля 2009

Изменить это:

formCheck.onSubmit = doMapping()

к этому:

formCheck.onSubmit = doMapping

Когда вы добавляете круглые скобки в конец функции, вы выполняете эту функцию. Когда вы назначаете функцию (или передаете ее в качестве параметра другой функции), вам нужно опустить круглые скобки, так как это способ получить указатель на функцию в JavaScript.


Редактировать: Вам также понадобится переместить объявление функции doMapping над назначением этой функции в событие onsubmit, как это (хороший улов tvanfosson!):

function doMapping() {
        alert("form submitted");
        return false;
    }

formCheck.onSubmit = doMapping(); 

Однако, если функция doMapping не используется в другом месте, вы можете объявить функцию doMapping как анонимную функцию, подобную этой:

formCheck.onSubmit = function() {
        alert("form submitted");
        return false;
    }

, который кажется мне чище.

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

Использование jQuery.

$(document).ready( function() {
    $('#commentform').submit( function() {
        alert('form submitted');
        return false;
    });
});
0 голосов
/ 02 апреля 2009

Спасибо! На самом деле я решил это по-другому, используя предложение Эндрю и событие window.onload - я думаю, что проблема была частично в том, что элемент фактически не загружался.

window.onload = function(){
    if (document.getElementById("commentform")){
        document.getElementById("commentform").onsubmit = doMapping;
    }
}

function doMapping(){
            alert("form submitted");
            return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...