I have a Vue component with
- an
<input>element that binds thev-on:keyup.enterkey todoFilter() - a
<button>that binds thev-on:clickevent todoFilter()
<input type="text" v-model="myVar" @keyup.enter="doFilter" />
<button @click="doFilter">Filter</button>
The button event will fire doFilter(), but the key up event will not fire, unless I add the .native modifier.
<input type="text" v-model="myVar" @keyup.native.enter="doFilter" />
The Vue.js documentation says this about .native:
listen for a native event on the root element of component.
When do I need to use .native and why does the keyup event not trigger without it?
Update 1: Add codepen and code
Runnable demo at https://codepen.io/hanxue/pen/Zapmra
<div id="app">
<md-toolbar>
<h1 class="md-title" style="flex: 1">@keyup.native event</h1>
<md-button class="md-icon-button">
<md-icon>more_vert</md-icon>
</md-button>
</md-toolbar>
<md-input-container>
<label>@keyup.enter</label>
<md-input type="text" @keyup.enter="doFilter" placeholder="@keyup.filter">
</md-input>
</md-input-container>
<md-input-container>
<label>@keyup.native.enter</label>
<md-input type="text" @keyup.native.enter="doFilter" placeholder="@keyup.native.filter">
</md-input>
</md-input-container>
<md-input-container>
<button @click="doFilter" placeholder="@keyup.filter">
@click </button>
</md-input-container>
</div>
<script>
Vue.use(VueMaterial)
var App = new Vue({
el: '#app',
methods: {
doFilter: function() {
alert('doFilter!')
}
},
})
</script>