【问题标题】:Vuejs getting the element that is being called by an event?Vuejs获取事件正在调用的元素?
【发布时间】:2016-01-15 09:05:38
【问题描述】:

我有多个列表项,我想在单击活动类时切换它们。

<ul class="list-body">
    <li v-on="click: setFilter('style', 'pils')" v-class="active: isActive">Pils</li>
    <li>Dubbel</li>
    <li>Tripel</li>
    <li v-on="click: setFilter('style', 'Quadrupel')">Quadrupel</li>
    <li>Wit</li>
</ul>

我已经有一个setFilter 点击功能,我可以在其中添加额外的功能来激活onClick 类。

setFilter: function(facet, value) {
    // Facet for style of beer(search filter)
    this.helper.addDisjunctiveFacetRefinement(facet, value).search();
},

我的问题是如何选择被点击并调用 setFilter 方法的特定 li 元素?

我想为每个已单击(或未单击)的单个 li 元素设置活动类 falsetrue 的变量。

【问题讨论】:

    标签: javascript jquery json vue.js


    【解决方案1】:

    您可以在函数中直接传递事件和事件目标。 目标是您单击的元素。

    HTML:

    <ul id="demo">
        <li v-on="click: onClick">Trigger a handler</li>
        <li v-on="click: n++">Trigger an expression</li>
    </ul>
    

    JS:

    var vue = new Vue({
      el: '#demo',
      data: {},
      methods: {
        onClick: function (e) {
          var clickedElement = e.target;
        }
      }
    })
    

    使用你的元素,你可以做你想做的事。 例如,如果你使用 jQuery:

    $(clickedElement).siblings().removeClass('active');
    $(clickedElement).addClass('active');
    

    【讨论】:

    • 在我的示例中只是一个简单的问题,我使用这个: click: setFilter('style', 'pils') 因为我传递参数,所以事件处理程序不起作用。如何让它像带参数的函数一样工作,我是否以某种方式将事件作为参数传递?
    • 不要尝试传递元素本身和参数。你可以从你的 onClick 方法调用 setFilter 并在那里分析你点击的元素。
    • 这似乎不适用于 Vue 2.0。我尝试像文档建议的那样使用 v-on:click="bla();" ,但是在工作时,发送的事件是未定义的。
    • @TomásCot 我通过 v-on:click="bla($event)" 让它工作了,但我猜如果它是没有必要传递事件反正被提供。谢谢!
    • @KonradViltersten,这不是必需的,但知道当您还需要传递一些其他参数时可能会派上用场。
    猜你喜欢
    • 2012-04-20
    • 2017-12-10
    • 2018-08-19
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2021-06-04
    • 2021-05-31
    相关资源
    最近更新 更多