简体   繁体   English

jQuery验证-动态表单字段消息

[英]JQuery Validate - Dynamic Form Field Messages

I am using JQuery Validate to do validation on my forms. 我正在使用JQuery Validate对表单进行验证。

$("#myform").validate({
    rules: {
        email: {
            customemail: true
        }
    },
    messages: {
        firstName: $('#' + requestTypeValue + '_' + 'firstName').attr('data-error'),
        lastName: $('#' + requestTypeValue + '_' + 'lastName').attr('data-error'),
        email: $('#email').attr('data-error')

    },

This works, pefectly. 完全有效。 but now I need to make a change so that the messages object can have dynamic feild names based on a global variable so I need to do something like this: 但是现在我需要进行更改,以便消息对象可以具有基于全局变量的动态字段名称,因此我需要执行以下操作:

$("#myform").validate({
    rules: {
       "email": {
            customemail: true
        }
    },
    messages: {
         "myGlobalVar" + firstName: $('#' + requestTypeValue + '_' + 'firstName').attr('data-error'),
         "myGlobalVar" + lastName: $('#' + requestTypeValue + '_' + 'lastName').attr('data-error'),
         "myGlobalVar" + email: $('#email').attr('data-error')

    },

I was thinking if I create the messages object outside of this method, then I would end up with something like this, might work 我在想如果我在此方法之外创建messages对象,那么我最终会遇到这样的情况,可能会起作用

$("#myform").validate({
    rules: {
       "email": {
            customemail: true
        }
    },
    messages: myMessageObject

    },

but I'm still not sure on the syntax to create a dynamic object in this way. 但是我仍然不确定以这种方式创建动态对象的语法。

Ideas please? 有什么想法吗?

UPDATE: Chirag Ravindra Answer looked like exactly what I needed so I tired it, but it didn't work. 更新: Chirag Ravindra Answer看起来完全像我所需要的,所以我很累,但是没有用。 So as a first step I tried this based on Chirag Ravindra answer: 因此,作为第一步,我根据Chirag Ravindra的答案尝试了这一点

$("#myform").validate({
    rules: {
        email: {
            customemail: true
        }
    },
    messages: {
        Prefix_firstName: $('#' + requestTypeValue + '_' + 'firstName').attr('data-error'),
        lastName: $('#' + requestTypeValue + '_' + 'lastName').attr('data-error'),
        email: $('#email').attr('data-error'),
        jobTitle: $('#' + requestTypeValue + '_' + 'jobTitle').attr('data-error'),
        company: $('#' + requestTypeValue + '_' + 'company').attr('data-error'),
        phone: $('#' + requestTypeValue + '_' + 'phone').attr('data-error'),
        comments: $('#' + requestTypeValue + '_' + 'comments').attr('data-error')
    },

This works for the Prefix_firstName field, BUT this doesn't work: 这适用于Prefix_firstName字段,但是不起作用:

var validationMessages = {};

validationMessages =  {
            Prefix_firstName: $('#' + requestTypeValue + '_' + 'firstName').attr('data-error'),
            lastName: $('#' + requestTypeValue + '_' + 'lastName').attr('data-error'),
            email: $('#email').attr('data-error'),
            jobTitle: $('#' + requestTypeValue + '_' + 'jobTitle').attr('data-error'),
            company: $('#' + requestTypeValue + '_' + 'company').attr('data-error'),
            phone: $('#' + requestTypeValue + '_' + 'phone').attr('data-error'),
            comments: $('#' + requestTypeValue + '_' + 'comments').attr('data-error')
        },

        $("#myform").validate({
            rules: {
                email: {
                    customemail: true
                }
            },
            messages: validationMessages,

I really don't understand why just by moving the messages in to an object causes it to fail... 我真的不明白为什么仅通过将消息移到对象中会导致它失败...

I'm not sure that this is valid syntax: 我不确定这是有效的语法:

{
     "myGlobalVar" + firstName: $('#' + requestTypeValue + '_' + 'firstName').attr('data-error'),
     "myGlobalVar" + lastName: $('#' + requestTypeValue + '_' + 'lastName').attr('data-error'),
     "myGlobalVar" + email: $('#email').attr('data-error')

}

You can use the array notation to create objects with dynamic keys (if that is your intention): 您可以使用数组符号来创建具有动态键的对象(如果您打算这样做):

 var requestTypeValue = 'test'; var myGlobalPrefix = 'prefix_'; var myMessagesObject = {}; myMessagesObject[myGlobalPrefix+'firstname'] = $('#' + requestTypeValue + '_' + 'firstName').attr('data-error'); console.log(myMessagesObject); /** Output: { "prefix_firstname": "Error Message" } **/ 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id='test_firstName' data-error="Error Message"></div> 

You can then use the myMessagesObject handler in your validation method 然后,您可以在验证方法中使用myMessagesObject处理程序

$("#myform").validate({
    rules: {
       "email": {
            customemail: true
        }
    },
    messages: myMessagesObject

 },...)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM