jQuery 工具提示自定义实现

发布于 2024-10-31 18:34:29 字数 1031 浏览 5 评论 0原文

我正在使用一个生成 HTML 表单的应用程序,并且包含用于客户端验证的自定义属性。用于验证的错误消息包含在 error 属性中,而用于验证输入的表达式包含在 expression 属性中。

我有以下 javascript 块,

$(document).ready(function() {

 $("input[expression]").blur(function() {
    var inputs = $(":input[expression]");
    inputs.each(function(index){ 
       var input = inputs[index]; 
       var expression = $(this).attr('expression');
       if(!$(this).val().match(expression))
       {
        var error = $(this).attr("error");
        $(this).attr("title",error);
        $(this).tooltip({ position: "center right", opacity: 0.7});
        $(this).tooltip().show();
       }
       else
       {
       }
   });
  }); 
}); 

我试图做的是使用 表达式 属性设置所有字段,以在输入框失去焦点时根据当前值验证其表达式值。

现在这有点起作用,但不是我想要的行为。

现在,当我单击输入元素时,会弹出工具提示错误消息。我不想要这个,我只希望它在运行 blur() 回调函数后显示错误消息。

有正确的方法吗?

我的标记的示例如下所示

<input type='text' name='firstName' expression='[a-zA-Z]' error='Please Enter First Name'/>

I am working with an application that is generating HTML forms, and is including custom attributes to be used for client side validation. The error message to be used for validation, is included in the error attribute, and the expression to validate the input against, is included in the expression attribute.

I have the following javascript block,

$(document).ready(function() {

 $("input[expression]").blur(function() {
    var inputs = $(":input[expression]");
    inputs.each(function(index){ 
       var input = inputs[index]; 
       var expression = $(this).attr('expression');
       if(!$(this).val().match(expression))
       {
        var error = $(this).attr("error");
        $(this).attr("title",error);
        $(this).tooltip({ position: "center right", opacity: 0.7});
        $(this).tooltip().show();
       }
       else
       {
       }
   });
  }); 
}); 

What I am attempting to do is setup all the fields with an expression attribute to validate their expression value against the current value when the input box, loses focus.

This is sort of working right now, but not with the behavior I would like it to have.

Right now, the tooltip error message is popping up when I click on the input element. I do not want this, I only want it to show the error message following running through the blur() callback function.

Is there a correct way to do this?

An example of what my markup would look like is shownbelow

<input type='text' name='firstName' expression='[a-zA-Z]' error='Please Enter First Name'/>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

千里故人稀 2024-11-07 18:34:29

当您模糊任何输入时,您的事件将针对每个输入触发。你的正则表达式也是错误的。

jQuery(document).ready(function() {

            jQuery("input[expression]").blur(function() {
                if(jQuery(this).val().search(jQuery(this).attr('expression')) == -1)
                {
                    var error = jQuery(this).attr("error");
                    jQuery(this).attr("title",error);
                    jQuery(this).tooltip({ position: "center right", opacity: 0.7});
                    jQuery(this).tooltip().show();
                }
            }); 
        }); 

正则表达式应该是这样的:^[a-zA-Z]*$

Your event is firing for every input when you blur out of any input. Your regex was also wrong.

jQuery(document).ready(function() {

            jQuery("input[expression]").blur(function() {
                if(jQuery(this).val().search(jQuery(this).attr('expression')) == -1)
                {
                    var error = jQuery(this).attr("error");
                    jQuery(this).attr("title",error);
                    jQuery(this).tooltip({ position: "center right", opacity: 0.7});
                    jQuery(this).tooltip().show();
                }
            }); 
        }); 

and the regex should be something like this: ^[a-zA-Z]*$

荒岛晴空 2024-11-07 18:34:29

您可以使用 HTML5 的 data 属性,以便将数据存储在您的 中,如下所示

<input type='text' name='firstName' 
    data-expression='[a-zA-Z]' data-error='Please Enter First Name' />

: jquery.com/jQuery.data/" rel="nofollow">.data API 在您需要时处理该信息。

但就其价值而言,这似乎不是处理验证的好方法,因为使用 Firebug 或 Chrome 的 Web 开发者控制台的人可以轻松更改 data-expression 属性,从而进行操作以获取围绕你的验证。

You could use HTML5's data attributes, so that data is stored in your <input> like:

<input type='text' name='firstName' 
    data-expression='[a-zA-Z]' data-error='Please Enter First Name' />

Then you could use jQuery's .data API to handle that information when you need it.

For what it's worth though, this doesn't seem like a great way to handle validation, as that data-expression attribute could easily be changed by someone with Firebug or Chrome's web developer console and thus manipulated to get around your validation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文