如何使用 vue.js 2 提交表单?
How to submit a form using vue.js 2?
我的看法bladelaravel是这样的:
<form slot="search" class="navbar-search" action="{{url('search')}}">
<search-header-view></search-header-view>
</form>
视图bladelaravel调用vue组件(search-header-view组件)
我的 vue 组件(search-header-view 组件)是这样的:
<template>
<div class="form-group">
<div class="input-group">
<input type="text" class="form-control" placeholder="Search" name="q" autofocus v-model="keyword">
<span class="input-group-btn">
<button class="btn btn-default" type="submit" id="submit-search"><span class="fa fa-search"></span></button>
</span>
<ul v-if="!selected && keyword">
<li v-for="state in filteredStates" @click="select(state.name)">{{ state.name }}</li>
</ul>
</div>
</div>
</template>
<script>
export default {
name: 'SearchHeaderView',
data() {
return {
baseUrl: window.Laravel.baseUrl,
keyword: null,
selected: null,
filteredStates: []
}
},
watch: {
keyword(value) {
this.$store.dispatch('getProducts', { q: value })
.then(res => {
this.filteredStates = res.data;
})
}
},
methods: {
select: function(state) {
this.keyword = state
this.selected = state
document.getElementById('submit-search').submit()
},
input: function() {
this.selected = null
}
},
}
</script>
我想在用户点击关键字时提交表单
我试试document.getElementById('submit-search').submit()
但是在控制台上存在这样的错误:
TypeError: document.getElementById(...).submit is not a function
如何解决这个错误?
您需要在 <form>
元素(组件的根元素)上调用 submit()
:
this.$el.submit();
编辑:由于您更新了问题,以上内容不再适用。
要触发按钮点击,只需在按钮元素上调用 click()
:
<button ref="submitButton">Foo</button>
this.$refs.submitButton.click();
如果您的组件是紧密耦合的,这很好,否则更简洁的解决方案是 $emit
来自 <search-header-view>
组件的事件并在父组件中响应它,像这样:
this.$emit('submit');
在父组件中:
<search-header-view @submit="submit">
methods: {
submit() {
// Submit the form manually here (add a ref to your form element)
this.$refs.form.submit();
}
}
只需为您的表单提供 @submit
侦听器:
<form slot="search" class="navbar-search" @submit="submited">
<search-header-view></search-header-view>
</form>
以及关联的方法:
methods: {
submited (e) {
// e is the form event, e.target is the form, do your things on submit
}
}
在它说 submit is not a function
的情况下,即使您引用它与 $refs
正确:
看起来,如果表单控件的名称或 ID 为提交,它将掩盖表单的提交方法。
在我的例子中,我的提交按钮上有 name="submit"
,我删除了它并且它工作正常。
我的看法bladelaravel是这样的:
<form slot="search" class="navbar-search" action="{{url('search')}}">
<search-header-view></search-header-view>
</form>
视图bladelaravel调用vue组件(search-header-view组件)
我的 vue 组件(search-header-view 组件)是这样的:
<template>
<div class="form-group">
<div class="input-group">
<input type="text" class="form-control" placeholder="Search" name="q" autofocus v-model="keyword">
<span class="input-group-btn">
<button class="btn btn-default" type="submit" id="submit-search"><span class="fa fa-search"></span></button>
</span>
<ul v-if="!selected && keyword">
<li v-for="state in filteredStates" @click="select(state.name)">{{ state.name }}</li>
</ul>
</div>
</div>
</template>
<script>
export default {
name: 'SearchHeaderView',
data() {
return {
baseUrl: window.Laravel.baseUrl,
keyword: null,
selected: null,
filteredStates: []
}
},
watch: {
keyword(value) {
this.$store.dispatch('getProducts', { q: value })
.then(res => {
this.filteredStates = res.data;
})
}
},
methods: {
select: function(state) {
this.keyword = state
this.selected = state
document.getElementById('submit-search').submit()
},
input: function() {
this.selected = null
}
},
}
</script>
我想在用户点击关键字时提交表单
我试试document.getElementById('submit-search').submit()
但是在控制台上存在这样的错误:
TypeError: document.getElementById(...).submit is not a function
如何解决这个错误?
您需要在 <form>
元素(组件的根元素)上调用 submit()
:
this.$el.submit();
编辑:由于您更新了问题,以上内容不再适用。
要触发按钮点击,只需在按钮元素上调用 click()
:
<button ref="submitButton">Foo</button>
this.$refs.submitButton.click();
如果您的组件是紧密耦合的,这很好,否则更简洁的解决方案是 $emit
来自 <search-header-view>
组件的事件并在父组件中响应它,像这样:
this.$emit('submit');
在父组件中:
<search-header-view @submit="submit">
methods: {
submit() {
// Submit the form manually here (add a ref to your form element)
this.$refs.form.submit();
}
}
只需为您的表单提供 @submit
侦听器:
<form slot="search" class="navbar-search" @submit="submited">
<search-header-view></search-header-view>
</form>
以及关联的方法:
methods: {
submited (e) {
// e is the form event, e.target is the form, do your things on submit
}
}
在它说 submit is not a function
的情况下,即使您引用它与 $refs
正确:
看起来,如果表单控件的名称或 ID 为提交,它将掩盖表单的提交方法。
在我的例子中,我的提交按钮上有 name="submit"
,我删除了它并且它工作正常。