2014-01-22 32 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。

相關問題