302

I pass a parameter in v-on:input directives. If I don't pass it, I can access the event in the method. Is there any way I can still access the event when passing the parameter to the function? Note that I am using vue-router.

This is without passing the parameter. I can access the event object:

HTML

<input type="number" v-on:input="addToCart" min="0" placeholder="0">

Javascript

methods: {
  addToCart: function (event) {
    // I need to access the element by using event.target
    console.log('In addToCart')
    console.log(event.target)
  }
}

This is when passing the parameter. I can't access the event object:

HTML

<input type="number" v-on:input="addToCart(ticket.id)" min="0" placeholder="0">

Javascript

methods: {
  addToCart: function (id) {
    // How can I access the element by using event
    console.log('In addToCart')
    console.log(id)
  }
}

Here is a fiddle of the code, it should be good enough to replicate the problem that I am having:

https://jsfiddle.net/lookman/vdhwkrmq/

4 Answers 4

460

If you want to access event object as well as data passed, you have to pass event and ticket.id both as parameters, like following:

HTML

<input type="number" v-on:input="addToCart($event, ticket.id)" min="0" placeholder="0">

Javascript

methods: {
  addToCart: function (event, id) {
    // use event here as well as id
    console.log('In addToCart')
    console.log(id)
  }
}

See working fiddle: https://jsfiddle.net/nee5nszL/

Edited: case with vue-router

In case you are using vue-router, you may have to use $event in your v-on:input method like following:

<input type="number" v-on:input="addToCart($event, num)" min="0" placeholder="0">

Here is working fiddle.

Sign up to request clarification or add additional context in comments.

6 Comments

I tried but I get the error message Property or method "event" is not defined on the instance but referenced during render. Make sure to declare reactive data properties in the data option
@geckob you passed the event from HTML: v-on:input ?
Not sure this is related or not, but I am using vue-router and this happens in one of the partials
@Saurabh @geckob In order to avoid the error, you need to pass the special $event variable to the method call v-on:input="addToCart($event, num)"
You should pass $event, not event
|
53

You can also do something like this...

<input @input="myHandler('foo', 'bar', ...arguments)">

Evan You himself recommended this technique in one post on Vue forum. In general some events may emit more than one argument. Also as documentation states internal variable $event is meant for passing original DOM event.

Update:

Unfortunately, this doesn’t work in Vue 3 anymore with standard DOM events; you can only use it when you emit your custom event like $emit('input', 1, 2, 3). For native DOM events, you need to resort to: <input @input="myHandler('foo', $event)">

4 Comments

jsfiddle.net/50wL7mdz/30115 Note the spread syntax will be transpiled when using *.vue components, but not if you use in-browser compilation.
there is a difference between "...arguments" and "$event"?
@Raphael There is a difference! With "$event" argument you pass only one argument from the event.
This solution works, unlike the other one. It does allow to pass multiple arguments as Raphael mentioned.
24

Depending on what arguments you need to pass, especially for custom event handlers, you can do something like this:

<div @customEvent='(arg1) => myCallback(arg1, arg2)'>Hello!</div>

1 Comment

12

I like this way of passing parameters because we can pass events and parameters both using an anonymous callback function.

<button v-on:click="(e)=>deleteHandler(e, args1)" > Click me </button>

1 Comment

You can also use the special $event variable for a shorter expression: @click="deleteHandler($event, args1)".

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.