v模型更改时如何触发事件?(vue js)

JavaScript

神无L

2020-03-10

我正在尝试使用触发该foo()功能,@click但是如您所见,需要按两次单选按钮才能正确触发该事件。仅在第二次按下时捕获该值。

我想触发事件而不@click只是在v-model(srStatus)更改时触发事件

这是我的小提琴:

http://fiddle.jshell.net/wanxe/vsa46bw8/

第458篇《v模型更改时如何触发事件?(vue js)》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

4个回答
卡卡西达蒙西里 2020.03.10

只是为了添加到上面的正确答案,在Vue.JS v1.0中,您可以编写

<a v-on:click="doSomething">

所以在这个例子中

 v-on:change="foo"

请参阅:http : //v1.vuejs.org/guide/syntax.html#Arguments

逆天乐 2020.03.10

您应该使用@input

<input @input="handleInput" />

@input 用户更改输入值时触发。

@change 当用户更改值和未聚焦输入(例如在外部某处单击)时触发

您可以在这里看到区别:https : //jsfiddle.net/posva/oqe9e8pb/

StafanHarry 2020.03.10

Vue2:如果您只想检测输入模糊的变化(例如,在按Enter键或单击其他位置之后),请执行(更多信息在此处

<input @change="foo" v-model... >

如果要检测单个字符更改(在用户键入期间),请使用

<input @keydown="foo" v-model... >

您还可以使用@keyup@input事件。如果您想传递其他参数,请在模板中使用 @keyDown="foo($event, param1, param2)"下面的比较(此处为可编辑版本

new Vue({
  el: "#app",
  data: { 
    keyDown: { key:null, val: null,  model: null, modelCopy: null },
    keyUp: { key:null, val: null,  model: null, modelCopy: null },
    change: { val: null,  model: null, modelCopy: null },
    input: { val: null,  model: null, modelCopy: null },
    
    
  },
  methods: {
  
    keyDownFun: function(event){                   // type of event: KeyboardEvent   
      console.log(event);  
      this.keyDown.key = event.key;                // or event.keyCode
      this.keyDown.val = event.target.value;       // html current input value
      this.keyDown.modelCopy = this.keyDown.model; // copy of model value at the moment on event handling
    },
    
    keyUpFun: function(event){                     // type of event: KeyboardEvent
      console.log(event);  
      this.keyUp.key = event.key;                  // or event.keyCode
      this.keyUp.val = event.target.value;         // html current input value
      this.keyUp.modelCopy = this.keyUp.model;     // copy of model value at the moment on event handling
    },
    
    changeFun: function(event) {                   // type of event: Event
      console.log(event);
      this.change.val = event.target.value;        // html current input value
      this.change.modelCopy = this.change.model;   // copy of model value at the moment on event handling
    },
    
    inputFun: function(event) {                    // type of event: Event
      console.log(event);
      this.input.val = event.target.value;         // html current input value
      this.input.modelCopy = this.input.model;     // copy of model value at the moment on event handling
    }
  }
})
div {
  margin-top: 20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

Type in fields below (to see events details open browser console)

<div id="app">
  <div><input type="text" @keyDown="keyDownFun" v-model="keyDown.model"><br> @keyDown (note: model is different than value and modelCopy)<br> key:{{keyDown.key}}<br> value: {{ keyDown.val }}<br> modelCopy: {{keyDown.modelCopy}}<br> model: {{keyDown.model}}</div>
  
  <div><input type="text" @keyUp="keyUpFun" v-model="keyUp.model"><br> @keyUp (note: model change value before event occure) <br> key:{{keyUp.key}}<br> value: {{ keyUp.val }}<br> modelCopy: {{keyUp.modelCopy}}<br> model: {{keyUp.model}}</div>
  
  <div><input type="text" @change="changeFun" v-model="change.model"><br> @change (occures on enter key or focus change (tab, outside mouse click) etc.)<br> value: {{ change.val }}<br> modelCopy: {{change.modelCopy}}<br> model: {{change.model}}</div>
  
  <div><input type="text" @input="inputFun" v-model="input.model"><br> @input<br> value: {{ input.val }}<br> modelCopy: {{input.modelCopy}}<br> model: {{input.model}}</div>
     
</div>

Pro路易 2020.03.10

发生这种情况是因为您的click处理程序在单选按钮的值更改之前触发。您需要改为监听change事件:

<input 
  type="radio" 
  name="optionsRadios" 
  id="optionsRadios2" 
  value=""
  v-model="srStatus" 
  v-on:change="foo"> //here

另外,请确保您真的想打电话foo()准备好……似乎您实际上并不想这样做。

ready:function(){
    foo();
},

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android