2015-02-05 82 views
0

我正在製作一個帶有大量輸入的窗體式控件,爲此我使用自己的聚合物元素和核心輸入。我無法驗證它。提交的核心輸入驗證已提交

我不想爲它設置自動驗證,因爲幾乎所有的輸入都是必需的,而且我不喜歡有一堆輸入爲紅色並顯示頁面加載錯誤的想法。我有什麼(和思想會工作)是下面的代碼:

<polymer-element name="custom-core-input" 
       attributes="columnId inputError validation inputRequired"> 
<template> 
    <section> 
     <paper-input-decorator id="decorator" error="{{inputError}}"> 
      <input id="custominput" 
        is="core-input" 
        validate="{{validation}}" 
        on-change="{{inputCommited}}" 
        required?="{{inputRequired}}"> 
     </paper-input-decorator> 
    </section> 
</template> 
<script> 
    Polymer({ 
     inputRequired: false, 
     inputCommited: function() { 
      this.$.decorator.isInvalid = !this.$.custominput.validity.valid; 
     } 
    }); 
</script> 
</polymer-element> 

我扔在之前的inputCommited功能的一些警告,它看起來像輸入值總是有效的,如果它是空的或無關緊要充滿了不應該匹配驗證的任何東西。作爲一個說明,我使用的驗證字符串是「^(\ d * | \ d +,\ d {1,2})$」,我認爲這適用於聚合物。在任何情況下,如果要求爲真,它不會作爲無效輸入空白。

回答

1

如果validation屬性是一個正則表達式使用<input pattern="{{ validation }}"...>,它應該工作(見input validation at MDN):

<input id="custominput" 
     is="core-input" 
     pattern="{{ validation }}" 
     on-change="{{ inputCommitted }}" 
     required?="{{ inputRequired }}"> 

change事件文本輸入時纔會觸發if the value is changed and the input loses focus。需要有另一種機制在適當的時候觸發驗證,以確保每次輸入都被驗證一次,例如,表單提交時。

+0

嗨,謝謝你的回答。我已經改變了模式驗證,現在它可以像這樣一個簡單的reg.expression:^ [0-9] * $,但沒有這個另一個:^(\ d * | \ d +,\ d {1, 2})$任何想法,爲什麼會這樣? – Iskalla 2015-02-09 08:01:13

+0

後一個正則表達式不適合你的方式?這兩個正則表達式似乎都適合我。你能給個例子嗎? – oliverdm 2015-02-09 12:17:19

+0

那麼,使用第一個,我改變了輸入的文本並且工作正常,這意味着當文本正確時,沒有任何反應,並且修飾器在錯誤時顯示錯誤,因爲它應該如此。在第二個正則表達式中嘗試同樣的事情時,我並沒有反應,當我在輸入中輸入「錯誤」時 – Iskalla 2015-02-09 16:14:35