2015-02-05 85 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