首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vue.js移除jQuery事件处理程序

Vue.js移除jQuery事件处理程序
EN

Stack Overflow用户
提问于 2017-05-23 11:55:21
回答 5查看 4.7K关注 0票数 2

因此,我使用jQuery制作了一个手风琴/制表符,我在li元素上使用jQuery.click方法来转换页面/制表符。现在,我希望集成Vue.js,以便在手风琴页面上显示从jquery获得的JSON数据。但是,当我在手风琴和.vue上添加el: '.vue'类时,jQuery.click事件根本不会触发,现在选项卡不会翻页。

也许我不应该在Jquery中使用Vue,但是我发现jQuery更容易完成简单的任务,比如在制表符之间切换。

PS:我对Vue很陌生

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-10-16 13:00:47

事件处理程序丢失,因为Vue替换了它们绑定到的元素。您可以使用$.holdReady延迟$(document).ready,直到组件被挂载。

代码语言:javascript
复制
$.holdReady(true)

document.addEventListener("DOMContentLoaded", () => {
  new Vue({
    el: "#app-body",
    mounted() {
      $.holdReady(false)
    }
  })
});
票数 2
EN

Stack Overflow用户

发布于 2017-12-12 13:51:11

在处理一个大型项目时,我也遇到了同样的问题,该项目有大量现有的jQuery代码,我们希望切换到Vue.JS,而不必一次重构所有代码。

如果您正在使用像webpack这样的模块构建器,并且无法保证您的导入顺序,那么您可以执行以下操作:

在您的根应用程序挂载后,在文档上广播一个自定义事件:

代码语言:javascript
复制
const app = new Vue({
    el: '#app',
    mounted() {
        $(document).trigger('vue-loaded');
    }
});

然后将所有jQuery代码包装在自定义事件的事件侦听器中:

代码语言:javascript
复制
$(document).on('vue-loaded', function () {
    const $toggle = $('.js-accordion-toggle');

    $toggle.on('click', function () {
        $(this).toggleClass('test');
    });
});

在一个大型应用程序中,这对我起了作用。

根据您的情况,您可能需要添加$nextTick以确保所有内容都已呈现(https://v2.vuejs.org/v2/api/#mounted)

代码语言:javascript
复制
mounted () {
    this.$nextTick(function () {
        // Code that will run only after the
        // entire view has been rendered
   })
}
票数 11
EN

Stack Overflow用户

发布于 2017-05-23 13:22:18

这是因为单击事件在VUE组件之前加载。您正在初始化不存在的hmtl上的单击事件。

代码语言:javascript
复制
$(document).on('click', '.classname', function(){
 //do action
});
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44134147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档