为单个字段使用Jxery Validate插件的2x远程方法

时间:2011-11-03 12:37:30

标签: validation jquery jquery-validate

我有一个正在使用Jquery's Validation Plugin验证的表单,我需要一种方法在同一个字段上通过Ajax进行至少2次验证...

示例:我有一个名为Login的字段,它接受用户名或电子邮件,我需要验证它是否是数据库中的现有电子邮件,或者它是数据库中的现有用户名,返回不同的消息并执行2用于执行这些验证的不同URL。

无论如何使用不同的消息和URL调用2个不同的远程方法,还是应该在AJAX同步调用中添加2个新方法?

修改

好吧,也许我应该说我想调用2个不同的远程方法或创建2个AJAX同步调用的原因:

问题是我正在使用Zend而我正在建立一个系统,可以验证服务器端(通过PHP)和客户端上的错误(通过Jquery Validate,由PHP类驱动创建,从Zend的原始验证者)。

示例

class Esytek_Form_JqueryValidator_NotEmpty extends Zend_Validate_NotEmpty implements Esytek_Form_JqueryValidator_Interface {

    public function elementSetOptions(Zend_Form_Element $element){
        $element->setRequired(true);
    }

    public function getJqueryCode(){
        return 'required: true,';
    }

    public function getJqueryMessage($mensagem){
        foreach ($this->_messageVariables as $ident => $property) {
            $mensagem = str_replace("%$ident%", (string) $this->$property, $mensagem);
        }
        return 'required: "<br>'.$mensagem.'",';
    }

    public function getNewJqueryFunction(){
        return null;
    }

    ...
}

Esytek_Form_JqueryValidator_Interface

interface Esytek_Form_JqueryValidator_Interface extends Zend_Validate_Interface{

    public function elementSetOptions(Zend_Form_Element $element);

    public function getJqueryCode();

    public function getJqueryMessage($mensagem);

    public function getNewJqueryFunction();
}

还有另一个类可以放在那里但是,简而言之,它所做的只是调用每个Jquery Validator的方法,聚合字符串中的所有Jquery代码然后,在表单中,我们应该调用一个方法,写出运行验证的jquery代码。

在这个上下文中,我想做一个可以在一个字段中生成多种类型的ajax验证的类,以支持在输入字段的Ajax验证中可能发生的所有可能情况......换句话说,我需要类似的东西:

    public function getNewJqueryFunction(){
        return array ('AjaxValidation_'.$count=>'$.validator.addMethod("tel_format"+'.$count.',
            function(value,element) {
                //Ajax call of URL
            }," ");'
        );
    }

或类似 Esytek_Form_JqueryValidator_NotEmpty 的东西,可以在一个字段中实现多个远程方法,因此我可以在任何Ajax调用案例中使用该JqueryValidator。

这样,我的问题是“什么是最好的方法,我怎么能用jquery的代码呢?”

1 个答案:

答案 0 :(得分:1)

我怀疑是否支持2个遥控器 但是,您可以在一个ajax调用中执行验证并在响应中返回自定义错误消息,如“已经使用用户名”或“已经使用电子邮件”。

Documentation -
响应被评估为JSON,对于有效元素必须为true,并且对于无效元素,可以是任何false,undefined或null,使用默认消息; 或字符串,例如。 “该名称已被采用,请尝试使用peter123”以显示为错误消息。