提交表格.如何引用表单元素?

bbs*_*nbb 9 vue.js

我想从一个方法中从我的Vue页面做一个经典的表单提交.我不想使用输入类型=提交.如何从我的方法中引用页面中的表单元素?当然我不必做document.getElementById()?

标记

<div id="vueRoot">
  <form>
    <input name="vitalInformation" v-model="store.vital">
    <a href="#" v-on:click="submit">SUBMIT</a>
  </form>
</div>
Run Code Online (Sandbox Code Playgroud)

var store = {vital:''};
vm = new Vue({
  el : "#vueRoot",
  data : {store : store},
  methods : {
    submit : function(){
      //I'm ready, how do I do it ??
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

的jsfiddle

Lin*_*org 36

答案是ref:https://vuejs.org/v2/api/#ref

标记

<div id="vueRoot">
  <form ref="form">
    <input name="vitalInformation" v-model="store.vital">
    <a href="#" v-on:click="submit">SUBMIT</a>
  </form>
</div>
Run Code Online (Sandbox Code Playgroud)

var store = {vital:''};
vm = new Vue({
  el : "#vueRoot",
  data : {store : store},
  methods : {
    submit : function(){
      this.$refs.form.submit()
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

  • @LinusBorg您可能应该将其更改为 [`form.requestSubmit()`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/requestSubmit#Usage_notes),这样任何表单验证vue 事件处理程序也可以触发。(抄送@AndresFelipe's) (9认同)
  • 它说````这个.$ refs.form.submit()````不是一个函数 (7认同)
  • @AhmedNawazKhan,正确的方法是“ this。$ refs.form。$ el.submit()”。vm。$ el将使您能够访问实际的dom元素 (6认同)
  • @AhmedNawazKhan 和其他人得到“不是函数”或“未定义”,请记住也将“ref =“form””添加到表单元素。 (2认同)

小智 18

抱歉回复晚了,但我很困惑您ref在提交表单时为什么需要。

data: function(){
  return {
   name: "",
   price: "",
  }
},
methods: {
  addProduct(e){
    e.preventDefault() // Prevent page from reloading.
    // console.log(this.name, this.price);
  }
}

 
Run Code Online (Sandbox Code Playgroud)
<form v-on:submit="addProduct">
  <input type="text" v-model="name" placeholder="Product Name" >
  <input type="number" v-model="price" placeholder="Price">
  <button type="submit">Add</button>
</form>

  
Run Code Online (Sandbox Code Playgroud)


小智 8

另一种选择是触发事件click()

<button ref="submit" style="display:none;">Submit</button>
Run Code Online (Sandbox Code Playgroud)

在你的函数中调用它如下:

this.$refs.submit.click();
Run Code Online (Sandbox Code Playgroud)