vue提交表单问题

比如这里有个表单demo:

<div id="app">
    <form @submit.prevent="submit">
        姓名
        <div class="field">
            <input name="name" type="text">
        </div>
        性別
        <div class="field">
            男<input name="gender" type="radio" value="male">
            女<input name="gender" type="radio" value="female">
        </div>
        <input type="submit" value="提交">
    </form>
</div>

用vue提交表单:

new Vue({

    el: '#app',
    methods: {
        submit: function(event) {
            
            var formData = new FormData(event.target);
            
            this.$http.post('/path/to', formData).then((response) => {
                // success callback
            }, (response) => {
                // error callback
            });

        }
    }

})

问题:
点击提交的时候,显示如下错误:Uncaught TypeError: Cannot read property 'target' of undefined,怎么个意思?

阅读 44.6k
4 个回答

你的 formData 是错误的,试试下面这样获取表单数据吧。

<div id="app">
    <form @submit.prevent="submit">
        <div class="field">
            姓名:<input type="text" v-model="user.name">
        </div>
        
        <div class="field">
            性別:
            <label>
                <input type="radio" value="男" v-model="user.gender"> 男
            </label>
            <label>
                <input type="radio" value="女" v-model="user.gender"> 女
            </label>
        </div>
        
        <input type="submit" value="提交">
    </form>
</div>
new Vue({

    el: '#app',
    data: {
        user: {
            name: '',
            gender: ''
        }
    },
    methods: {
        submit: function() {
          var formData = JSON.stringify(this.user); // 这里才是你的表单数据
          
          this.$http.post('/path/to', formData).then((response) => {
              // success callback
          }, (response) => {
              // error callback
          });
        }
    }

})

试试?

@submit="submit($event)"
<div id="app">
    <form @submit.prevent="submit">
        <div class="field">
            姓名:<input type="text" v-model="user.name">
        </div>
        
        <div class="field">
            性別:
            <label>
                <input type="radio" value="男" v-model="user.gender"> 男
            </label>
            <label>
                <input type="radio" value="女" v-model="user.gender"> 女
            </label>
        </div>
        
        <input type="submit" value="提交">
    </form>
</div>
new Vue({

    el: '#app',
    data: {
        user: {
            name: '',
            gender: ''
        }
    },
    methods: {
        submit: function() {
          var formData = JSON.stringify(this.user); // 这里才是你的表单数据
          console.log(formData);
        }
    }

})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题