【问题标题】:jQuery Tooltip Custom implementationjQuery Tooltip 自定义实现
【发布时间】:2011-04-11 17:48:45
【问题描述】:

我正在使用一个生成 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'/>

【问题讨论】:

    标签: jquery jquery-plugins jquery-tools


    【解决方案1】:

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

    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]*$

    【讨论】:

      【解决方案2】:

      您可以使用 HTML5 的 data 属性,以便将数据存储在您的 &lt;input&gt; 中,例如:

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

      然后,您可以在需要时使用 jQuery 的 .data API 来处理该信息。

      尽管如此,这似乎不是处理验证的好方法,因为 data-expression 属性很容易被 Firebug 或 Chrome 的 Web 开发者控制台更改,从而绕过验证。

      【讨论】:

      • 正确,这不是我们使用的主要验证形式,我们也有服务器端实现,但我们正在生成客户端表单,并提供视觉提示只是为了尝试培养即将到来的数据在,而不是试图一起阻止这一切。
      • 同意,但业务用户驱动的设计有时会变得很时髦。进行验证的正确方法是使用带有任何你想要的 CSS 样式的验证插件。您甚至可以从服务器端模型对象驱动验证规则。
      • 我们不能使用验证插件,因为我们需要动态处理正则表达式。我不是在寻找如何进行验证的替代解决方案,而是在寻找解决此问题的方法。不过还是谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      • 2014-10-14
      • 2011-06-04
      相关资源
      最近更新 更多