Пометка поля как недействительного - PullRequest
3 голосов
/ 12 августа 2011

Я использую собственный AJAX vtype, который работает и все. Однако я заметил, что в документации extjs

"Примечание: этот метод не приводит к тому, что методы validate или isValid поля возвращают false, если значение проходит проверку. Поэтому просто пометка поля как недействительного не помешает отправке форм, отправленных с помощью Ext.form.action.Submit Опция .clientValidation установлена. "

Как пометить поле как недействительное, чтобы form.isValid () вернул false? Мой vtype:

Ext.apply(Ext.form.VTypes, {
username: function(value, field){        
    var conn = new Ext.data.Connection();
    conn.request({
        url: 'test.php',
        params:{email:value},
        method: 'POST',

        success: function(responseObject){
            var resp = responseObject.responseText;
            if (resp == 0) {
                field.markInvalid('This email is invalid or already registered!');                
            } else if (resp == 1) {
                field.clearInvalid();
            }
        },
        failure: function(){                
           Ext.Msg.show({title: 'Error', msg: 'Connection error!',});
        }
    });
    return true;
}
});

1 Ответ

1 голос
/ 12 августа 2011

Ну, если вы посмотрите на определение clientValidation:

Определяет, проверяются ли поля формы при последнем вызове isValid до подачи. Введите false в опциях отправки формы чтобы предотвратить это. Если не определено, проверка поля перед отправкой производится.

По сути, это означает, что если для него установлено значение false, то форма будет автоматически проверена перед отправкой ... в этот момент произойдет сбой, если вы пометили какие-либо поля как недействительные. Если вы установите его на true, то вам необходимо вручную проверить, является ли форма действительной, перед отправкой.

Стоит отметить, что ваш AJAX vtype никогда не будет работать. Когда форма вызывает vtype, чтобы проверить, является ли поле действительным, все, что он получает в ответ, это true ..., поэтому форма отправляется несмотря ни на что. Даже если вы скажете, чтобы он возвращался после выполнения запроса ajax, форма будет отправлена ​​до того, как завершится запрос vtype ajax.

Лучшим решением было бы включить вызов vtype вручную в свой обработчик кнопки отправки ... затем в success запроса ajax просто выполните

if(form.isValid()) {
   form.getForm().submit();
}

Это заставит событие нажатия кнопки отправки сначала проверить поле имени пользователя, а затем, и только тогда, оно отправит форму.

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