如何自定义jquery验证引擎消息错误

如何自定义jquery验证引擎消息错误,jquery,html,jquery-validation-engine,Jquery,Html,Jquery Validation Engine,我正在尝试使用validationEngine插件生成自定义错误消息 默认情况下,当您使用如下内容时: <input value="" class="validate[required]" type="text" name="name" id="name"/> 任何帮助都将不胜感激,我已经有几天的时间来完成这项工作 您只需修改jquery.validationEngine-en.js中的消息(如果不是英语,也可以修改任何语言)。请记住,您更改的验证类型的所有字段都将显示相同的消息

我正在尝试使用validationEngine插件生成自定义错误消息

默认情况下,当您使用如下内容时:

<input value="" class="validate[required]" type="text" name="name" id="name"/>

任何帮助都将不胜感激,我已经有几天的时间来完成这项工作

您只需修改jquery.validationEngine-en.js中的消息(如果不是英语,也可以修改任何语言)。请记住,您更改的验证类型的所有字段都将显示相同的消息

这也是您可以添加自己的自定义验证和消息的地方

\编辑-啊,我明白你的意思。好吧,我不能因此而获得任何荣誉,但是一家叫做的公司使用字段的title属性为相同的问题提出了一个解决方案

它们覆盖validationengine中的buildprompt函数,并添加了拾取自定义错误消息的功能

下面是他们的代码:

var buildPrompt = $.validationEngine.buildPrompt;
$.validationEngine.buildPrompt = function(caller, promptText, type, ajaxed) {
  // Get the rules to map the message for a method
  var rulesRegExp = /\[(.*)\]/;
  var getRules = rulesRegExp.exec($(caller).attr('class'));
  var str = getRules[1];
  var pattern = /\[|,|\]/;
  var rules = str.split(pattern);
  //Check if title attribute present in the element
  //otherwise we shall use default error message
  if ($(caller).attr('title')) {
    var getMessages = rulesRegExp.exec($(caller).attr('title'));
    var str = getMessages[1];
    var pattern = /\[|,|\]/;
    var messages = str.split(pattern);

    var j = 0;
    newPrompt = "";
    for ( var i = 0; i < rules.length; i++) {
     rules = $.validationEngine.settings.allrules[rules[i]]
      if (rules) {
        if (promptText.indexOf(rules.alertText) != -1) {

          newPrompt += "
<p class="errorMsg">" + messages[j] + "

";

        }
        j++;
      }
    }
    promptText = newPrompt;
  }

  buildPrompt(caller, promptText, type, ajaxed);
}
</p>
var buildPrompt=$.validationEngine.buildPrompt;
$.validationEngine.buildPrompt=函数(调用者、PrompText、类型、ajaxed){
//获取映射方法消息的规则
变量规则regexp=/\[(.*)\]/;
var getRules=rulesRegExp.exec($(调用者).attr('class');
var str=getRules[1];
变量模式=/\[\],\]/;
var规则=str.split(模式);
//检查元素中是否存在title属性
//否则,我们将使用默认错误消息
if($(调用者).attr('title')){
var getMessages=rulesRegExp.exec($(调用者).attr('title');
var str=getMessages[1];
变量模式=/\[\],\]/;
var messages=str.split(模式);
var j=0;
newPrompt=“”;
对于(var i=0;i“+消息[j]+”
";
}
j++;
}
}
PrompText=newPrompt;
}
buildPrompt(调用者、promptext、type、ajaxed);
}

他们在“title”属性中添加了错误消息,这使得为不同字段定制错误消息具有灵活性。下面是可以添加自定义错误消息的示例:

<input value="" class="validate[required,custom[noSpecialCaracters],length[0,20]]" name="user" id="user" title="[* Desired username is required,* No special caracters allowed for  Desired username,* Desired username should have characters between 0 and 20]" type="text">


我希望这能解决您的问题。

您可以设置自己的自定义错误消息。在这个脚本中,“required”已经开始工作了,现在我们将创建一个新规则“required_2”。 步骤1:在jquery.validationEngine.js文件中创建一个新案例 像

case "required_2":
required = true;
errorMsg = methods._required(field, rules, i, options);
break;
为所需的_2添加添加功能

_required_2: function(field, rules, i, options) {
            switch (field.prop("type")) {
                case "text":
                case "password":
                case "textarea":
                case "file":
                default:
                    if (!($.trim(field.val())))
                        return options.allrules[rules[i]].alertText;
                    break;
                case "radio":
                case "checkbox":
                    var form = field.closest("form");
                    var name = field.attr("name");
                    if (form.find("input[name='" + name + "']:checked").size() == 0) {
                        if (form.find("input[name='" + name + "']").size() == 1)
                            return options.allrules[rules[i]].alertTextCheckboxe;
                        else
                            return options.allrules[rules[i]].alertTextCheckboxMultiple;
                    }
                    break;
                // required for <select>
                case "select-one":
                    // added by paul@kinetek.net for select boxes, Thank you
                    if (!field.val())
                        return options.allrules[rules[i]].alertText;
                    break;
                case "select-multiple":
                    // added by paul@kinetek.net for select boxes, Thank you
                    if (!field.find("option:selected").val())
                        return options.allrules[rules[i]].alertText;
            }
        }
步骤:3现在几乎完成了,您可以在html字段中使用它

<input value="" class="validate[required_2] text-input" type="text" name="req1" id="req1" data-prompt-position="topRight:-70" />

**试试这个。。适用于我:)如果使用jquery.validationEngine.js中的以下代码设置标题,则修改promtText

if(field.attr(“title”)!=null) PrompText=field.attr(“标题”)

***

/**
*为给定字段生成并着色提示。
*
*@param{jqObject}字段
*@param{String}promptext要显示的html文本类型
*@param{String}键入气泡的类型:“通过”(绿色)、“加载”(黑色)任何其他内容(红色)
*@param{boolean}ajaxed-用于标记未通过ajax验证的字段
*@param{Map}options用户选项
*/
_buildPrompt:函数(字段、PrompText、类型、ajaxed、选项){
//创建提示
变量提示=$('');
prompt.addClass(方法._getClassName(field.attr(“id”))+“formError”);
//添加类名以标识提示的父窗体
如果(字段为(“:输入”))
prompt.addClass(“parentForm”+方法._getClassName(field.parents('form').attr(“id”));
prompt.addClass(“formError”);
开关(类型){
案例“通行证”:
prompt.addClass(“绿色弹出”);
打破
案例“荷载”:
prompt.addClass(“blackPopup”);
打破
违约:
/*它有错误*/
//警报(“未知弹出类型:+类型”);
}
如果(ajaxed)
prompt.addClass(“ajaxed”);
//创建提示内容
if(field.attr(“title”)!=null)
PrompText=field.attr(“标题”);
var promptContent=$('').addClass(“formErrorContent”).html(promptText).appendTo(prompt);
//创建指向该字段的css箭头
//请注意,max复选框和radio上没有三角形
如果(选项。显示箭头){
var arrow=$('').addClass(“formErrorArrow”);
//提示定位调整支持。用途:位置类型:Xshift、Yshift(例如:左下+20或左下:-20、+10)
变量位置类型=field.data(“promptPosition”)| | options.promptPosition;
if(typeof(positionType)==“string”){
var pos=positionType.indexOf(“:”);
如果(位置!=-1)
位置类型=位置类型。子字符串(0,位置);
}
开关(位置型){
案例“左下角”:
案例“右下角”:
prompt.find(“.formErrorContent”)。在(箭头)之前;
addClass(“formErrorArrowBottom”).html(“”);
打破
案例“左上”:
案例“topRight”:
html(“”);
prompt.append(箭头);
打破
}
}
//修改jqueryui的z索引
if(field.closest('.ui对话框').length)
prompt.addClass('formErrorInsideDialog');
prompt.css({
“不透明度”:0,
“位置”:“绝对”
});
字段前(提示);
var pos=方法。\u计算位置(字段、提示、选项);
prompt.css({
“top”:调用方的位置,
“左”:主叫位置
"required_2": { // Add your regex rules here, you can take telephone as an example
                    "regex": "none",
                    "alertText": "* This field is required by mohan",
                    "alertTextCheckboxMultiple": "* Please select an option",
                    "alertTextCheckboxe": "* This checkbox is required",
                    "alertTextDateRange": "* Both date range fields are required"
                },
<input value="" class="validate[required_2] text-input" type="text" name="req1" id="req1" data-prompt-position="topRight:-70" />
        /**
     * Builds and shades a prompt for the given field.
     *
     * @param {jqObject} field
     * @param {String} promptText html text to display type
     * @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)
     * @param {boolean} ajaxed - use to mark fields than being validated with ajax
     * @param {Map} options user options
     */
     _buildPrompt: function (field, promptText, type, ajaxed, options) {

         // create the prompt
         var prompt = $('<div>');
         prompt.addClass(methods._getClassName(field.attr("id")) + "formError");
         // add a class name to identify the parent form of the prompt
         if (field.is(":input"))
             prompt.addClass("parentForm" + methods._getClassName(field.parents('form').attr("id")));
         prompt.addClass("formError");

         switch (type) {
             case "pass":
                 prompt.addClass("greenPopup");
                 break;
             case "load":
                 prompt.addClass("blackPopup");
                 break;
             default:
                 /* it has error  */
                 //alert("unknown popup type:"+type);
         }
         if (ajaxed)
             prompt.addClass("ajaxed");

         // create the prompt content
         if (field.attr("title") != null)
            promptText = field.attr("title");
         var promptContent = $('<div>').addClass("formErrorContent").html(promptText).appendTo(prompt);


         // create the css arrow pointing at the field
         // note that there is no triangle on max-checkbox and radio
         if (options.showArrow) {
             var arrow = $('<div>').addClass("formErrorArrow");

             //prompt positioning adjustment support. Usage: positionType:Xshift,Yshift (for ex.: bottomLeft:+20 or bottomLeft:-20,+10)
             var positionType = field.data("promptPosition") || options.promptPosition;
             if (typeof (positionType) == 'string') {
                 var pos = positionType.indexOf(":");
                 if (pos != -1)
                     positionType = positionType.substring(0, pos);
             }

             switch (positionType) {
                 case "bottomLeft":
                 case "bottomRight":
                     prompt.find(".formErrorContent").before(arrow);
                     arrow.addClass("formErrorArrowBottom").html('<div class="line1"><!-- --></div><div class="line2"><!-- --></div><div class="line3"><!-- --></div><div class="line4"><!-- --></div><div class="line5"><!-- --></div><div class="line6"><!-- --></div><div class="line7"><!-- --></div><div class="line8"><!-- --></div><div class="line9"><!-- --></div><div class="line10"><!-- --></div>');
                     break;
                 case "topLeft":
                 case "topRight":
                     arrow.html('<div class="line10"><!-- --></div><div class="line9"><!-- --></div><div class="line8"><!-- --></div><div class="line7"><!-- --></div><div class="line6"><!-- --></div><div class="line5"><!-- --></div><div class="line4"><!-- --></div><div class="line3"><!-- --></div><div class="line2"><!-- --></div><div class="line1"><!-- --></div>');
                     prompt.append(arrow);
                     break;
             }
         }
         // Modify z-indexes  for jquery ui
         if (field.closest('.ui-dialog').length)
             prompt.addClass('formErrorInsideDialog');

         prompt.css({
             "opacity": 0,
             'position': 'absolute'
         });
         field.before(prompt);

         var pos = methods._calculatePosition(field, prompt, options);
         prompt.css({
             "top": pos.callerTopPosition,
             "left": pos.callerleftPosition,
             "marginTop": pos.marginTopSize,
             "opacity": 0
         }).data("callerField", field);

         if (options.autoHidePrompt) {
             setTimeout(function () {
                 prompt.animate({
                     "opacity": 0
                 }, function () {
                     prompt.closest('.formErrorOuter').remove();
                     prompt.remove();
                 });
             }, options.autoHideDelay);
         }
         return prompt.animate({
             "opacity": 0.87
         });
     },
     /**
     * Updates the prompt text field - the field for which the prompt
     * @param {jqObject} field
     * @param {String} promptText html text to display type
     * @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)
     * @param {boolean} ajaxed - use to mark fields than being validated with ajax
     * @param {Map} options user options
     */
     _updatePrompt: function (field, prompt, promptText, type, ajaxed, options, noAnimation) {

         if (prompt) {
             if (typeof type !== "undefined") {
                 if (type == "pass")
                     prompt.addClass("greenPopup");
                 else
                     prompt.removeClass("greenPopup");

                 if (type == "load")
                     prompt.addClass("blackPopup");
                 else
                     prompt.removeClass("blackPopup");
             }
             if (ajaxed)
                 prompt.addClass("ajaxed");
             else
                 prompt.removeClass("ajaxed");

             if (field.attr("title") != null)
                 promptText = field.attr("title");
             prompt.find(".formErrorContent").html(promptText);

             var pos = methods._calculatePosition(field, prompt, options);
             var css = { "top": pos.callerTopPosition,
                 "left": pos.callerleftPosition,
                 "marginTop": pos.marginTopSize
             };

             if (noAnimation)
                 prompt.css(css);
             else
                 prompt.animate(css);
         }
     },
jQuery('#fieldId').validationEngine('showPrompt', 'This a custom msg', 'error', true)