2014-01-22 30 views
0

使用HTML5 Validation API时,可以拦截错误,访问错误消息并以不同方式呈现。使用WebShim Polyfill lib时,我可以访问元素的默认validationMessage吗?

当使用WebShim Polyfill时,我希望这将以相同的方式工作,而无需访问customValidationMessage属性。

有什么方法可以配置WebShim,以便我们可以编写一致的代码来拦截这些错误消息,如下所示。

$("input").on("invalid", function(evt) { evt.preventDefault(); alert(evt.currentTarget.validationMessage); });

...我希望这个代码在填充工具的工作,也许是我误解了它的设置还是什么?

我想这样做的原因是,我可以抓住所有无效字段并在一个块中显示错误,而不是在每个字段旁边。

感谢, 尼克

回答

0

是的,这是可能的。如果您正确设置了所有内容,则只需将您的调用更改为validationMessage即可。 Webshims总是通过jQuery API修复元素,而不是DOM元素本身。这意味着你总是have to use $.prop to access DOM properties

$("input").on("invalid", function(evt) { 
    evt.preventDefault(); 
    alert($.prop(evt.target, "validationMessage")); 
}); 

您还可以使用eventdelegation:

$(function(){ 
    $(document).on("invalid", function(evt) { 
     var message = $.prop(evt.target, "validationMessage"); 
     if(message){ 
      evt.preventDefault(); 
      alert(message); 
     } 
    }); 
}); 

注:

  1. Eventdelegation无效是通过事件捕获(这是不正常使用的jQuery)来完成。因此,您必须等待直到polyfill被加载。 (正常情况下,jQuery的ready事件被延迟到那时)

  2. 我检查的validationMessage是存在的,虽然有一个无效的事件。这是为什么:有一个规范的变化,现在则是无效的事件也引发表单元素上。这是目前仅在webshims的不稳定版本,并只对不能浏览器(IE < 12,Safari浏览器< 8 ...)polyfilled。

相关问题