Как проверить форму додзё для Ajax? - PullRequest
2 голосов
/ 23 мая 2011

Я пытаюсь проверить форму, написанную на Javascript / Dojo, прежде чем публиковать ее с помощью Ajax.Вот код:

    <script src="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dojo/dojo.xd.js" type="text/javascript" djConfig="parseOnLoad: true"></script>
    <script type="text/javascript">
                dojo.require("dijit.form.Form");
                dojo.require("dijit.form.Button");
                dojo.require("dijit.form.ValidationTextBox");
        </script>
        <script>

        function send()
        {
            var mainForm = dojo.byId( "mainform" );
            dojo.connect( mainForm , "onsubmit", function( event )
            {
                dojo.stopEvent(event);
                if ( mainForm.validate() )
                {
                    alert( "valid" );
                    var xhrArgs = {
                            form:  dojo.byId( "mainform" ),
                            load:  function( data )
                            {
                                // Success
                                alert( "Success" );
                            },
                            error:  function( error )
                            {
                                // Error
                                alert( "Error" );
                            }
                        }
                    var deferred = dojo.xhrPost( xhrArgs );
                }
                else
                {
                    alert( "not valid" );
                }
                });
        }
        dojo.addOnLoad( send );
    </script>
    <link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.5/dijit/themes/claro/claro.css"/>
</head>
<body class="claro">
    <h2>Invitation:</h2>
    <div dojoType="dijit.form.Form" id="mainform" jsId="mainform" encType="multipart/form-data" action="whatever.php" method="post">
        <label for="name">Name:  </label><input type="text" id="name" name="name" size="50"
                    dojoType="dijit.form.ValidationTextBox"
                    required="true"
                    propercase="true"/>
                    <br><br>

        <button type="submit" dojoType="dijit.form.Button">Send Message</button>
    </div>
</body>

Очевидно, я не использую "alert" в рабочем коде;они помогают показать мне, что работает, а что нет.Проблема здесь в том, что вызов mainForm.validate () никогда не возвращается.Закомментирование вызова validate () «исправляет» проблему (данные формы помещаются в файл .php), но теперь проверки вообще нет.

Ответы [ 2 ]

1 голос
/ 23 мая 2011

Здравствуйте и добро пожаловать в StackOverflow.

Убедитесь, что вы используете dijit.byId для поиска диджитов (а не только их DOM-узлов с dojo.byId), и что вы используете правильно прописанные имена событий. Попробуйте изменить send функцию следующим образом:

function send()
{
    var mainForm = dijit.byId( "mainform" );
    dojo.connect( mainForm , "onSubmit", function( event )
    ....

Когда вы используете dojo.byId, вы получаете обычный узел DOM (обычный тег HTML <form>), а не фактический объект dijit (который имеет функцию validate). По этой же причине неправильно работает «onsubmit»: в обычной HTML-форме есть событие «onsubmit», а в dijit есть только метод «onSubmit» (я согласен, это немного сбивает с толку).

0 голосов
/ 24 мая 2011

Это пирог пирога. делай так dijit.form.Form имеет атрибут с именем state. если это состояние пустая строка, то виджеты формы, такие как dojo textbox , действительны.

Вы можете сделать это так. 1) Не присоединяйте форму для отправки. Вместо этого просто прикрепите щелчок для кнопки и сделайте следующий код внутри обработчика щелчка кнопки.

var validForm = "";
dojo.connect( submitBtnDojoWidget, "onclick", function( event ){
 if(mainform.state === validForm){
  mainform.submit();
 }
 else {
  // here mainform.state may be 'invalid' or 'incomplete'
  console.log(mainform.state);
 }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...