Forms 聚合:防止在输入无效时提交表单

Forms 聚合:防止在输入无效时提交表单,forms,validation,polymer,polymer-1.0,Forms,Validation,Polymer,Polymer 1.0,我有一个组件,它封装了纸张输入,如您在以下代码中所见: <dom-module id="my-p"> <template> <div class="my-class> <paper-input type="number" value="{{value}}" name="{{name}}" error-message="Error"

我有一个组件,它封装了
纸张输入
,如您在以下代码中所见:

<dom-module id="my-p">
  <template>
    <div class="my-class>
        <paper-input
            type="number"
            value="{{value}}"
            name="{{name}}"
            error-message="Error"
            invalid="{{invalid}}"
            label="{{name}}"
            allowed-pattern="[0-9,]"
            required="{{required}}"></paper-input>
    </div>
  </template>

  <script>
    Polymer({
        is: 'my-p',
        properties: {
            name: String,
            value : {
                type: Number,
                notify : true
            },
            required : Boolean,
            invalid: {
              type: Boolean,
              value: false,
              notify: true
            },
        }
    });
  </script>
</dom-module>


不要使用
按钮
,而是调用自己的函数,手动检查表单是否有效,然后手动提交表单

iron form
具有
validate
功能,但我认为ti在这里不起作用,因为您使用的是封装纸输入。幸运的是,
paper-input
也有
submit
函数,因此您可以在每个
my-p
元素上调用此函数

例如:

   <form is="iron-form" id="form" method="get">
        <my-p name="my input 1" value="{{value1}}" required></my-p>

        <paper-input name="paper" type="number" label="paper" required="true"></paper-input>

        <paper-button raised on-tap="checkAndSendForm">Send</paper-button>
    </form>
my-p
元素中,您必须定义函数
validate
,该函数将在
纸张输入上调用另一个
validate
函数

validate() {
  this.querySelector("paper-input").validate(); // validate paper-input
}
我还建议您在
my-p
元素中的
required
属性上设置
reflect to attribute
。但这只是因为我使用了选择器
querySelectorAll(“my-p[required]”)


不要使用
按钮
,而是调用自己的函数,手动检查表单是否有效,然后手动提交表单

iron form
具有
validate
功能,但我认为ti在这里不起作用,因为您使用的是封装纸输入。幸运的是,
paper-input
也有
submit
函数,因此您可以在每个
my-p
元素上调用此函数

例如:

   <form is="iron-form" id="form" method="get">
        <my-p name="my input 1" value="{{value1}}" required></my-p>

        <paper-input name="paper" type="number" label="paper" required="true"></paper-input>

        <paper-button raised on-tap="checkAndSendForm">Send</paper-button>
    </form>
my-p
元素中,您必须定义函数
validate
,该函数将在
纸张输入上调用另一个
validate
函数

validate() {
  this.querySelector("paper-input").validate(); // validate paper-input
}
我还建议您在
my-p
元素中的
required
属性上设置
reflect to attribute
。但这只是因为我使用了选择器
querySelectorAll(“my-p[required]”)


Kuba,
querySelectorAll
函数不返回任何内容。好的,然后您可以使用
Polymer.dom(this.root)。querySelectorAll
如果不返回任何内容,则选择器中存在错误。所以只要试着只设置Polymer.dom(this.root).querySelectorAll(“我的应用”)
,并告诉它是否有效。伙计,你得自己试试。我不会指导您完成所有操作:)Kuba,
querySelectorAll
函数不返回任何内容。好的,然后您可以使用
Polymer.dom(this.root)。querySelectorAll
如果它不返回任何内容,则选择器中存在错误。所以只要试着只设置Polymer.dom(this.root).querySelectorAll(“我的应用”)
,并告诉它是否有效。伙计,你得自己试试。我不会指导你完成一切:)
required: {
  type: Boolean,
  reflectToAttribute: true
}