jquery验证尚未创建的元素

时间:2009-03-23 03:36:48

标签: jquery validation jquery-validate

我想知道在初始设置规则时是否可以让jQuery Validator插件验证dom中尚不存在的元素。

调用.Rules(“add”,therules)方法只会将规则附加到当前存在于dom中的元素。如果我要创造一些。验证不会触发。有什么想法吗?

我正在使用的验证器的主页:http://bassistance.de/jquery-plugins/jquery-plugin-validation/

通过http://ejohn.org/blog/javascript-micro-templating/

创建新元素

基本上有一个ajax调用,服务器返回一堆json(ajaj?),这个json是通过resig的模板引擎来完成的。示例模板如下所示:

<script type="text/html" id="ProductsTemplateEdit">
    <td>
        <input type="hidden" value="<#= item.ID #>" id="Edit.ID" name="Edit.ID" />
        <input type="text" value="<#= item.Price#>" id="Edit.Price" name="Edit.Price" />
    </td>
</script>

值显然是通过传入的json填充的。

我还应该提一下,我正在使用xval验证框架,它基本上自动为我生成jquery验证规则:http://blog.codeville.net/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/

4 个答案:

答案 0 :(得分:2)

好的,试试两个。什么是动态添加元素?你不能把.Rules(“add”,)放在同一个代码上吗?

答案 1 :(得分:2)

嘿,不确定这是不是一个不礼貌的黑客,但它对我有用。在此之前,我在选择器上执行each()并遇到与新创建的Ajaxed元素相同的问题。

现场的Mouseover事件似乎已经完成了这个技巧,因为你的css不会让你疯狂:

// >>> MSG/Comment form validator, now and forever...  
    $('form.streamForms').live('mouseover', function(){
        $(this).validate({
            rules: {
                text: "required"

            },
            messages: {
                text: " "
            }
        });    
    });

希望它有所帮助!

答案 2 :(得分:0)

您将需要查看jQuery 1.3的新Live Events

答案 3 :(得分:0)

以下是我处理此问题的方法。首先,我创建了验证对象。


    var myvalidations = {};
    myvalidation.registerform = function() { $("#registerform").validate({
            submitHandler: function(form) {
                $(form).ajaxSubmit(optionspersonal); 
                //submitReg();
            },
                    rules: {
                firstname: {
                     required: true,
                     minlength: 5,
                     maxlenght: 22
                },
                    messages: {
                             firstname: {
                                 required: "Tell us what to call you by.",
                     minlength: "Your username must consist of at least 5 characters"
                             }
                     }
             });
        }

现在,每当您创建表单时,请确保其上有ID或稍微引用它,并在创建后立即调用您的函数。


    //create my content
    $('.content').html('--fields etc--');
    //add validation
    myvalidation.registerform();

欢迎任何进一步的建议;但我认为基本上这是正确的做法。