“el.closest 不是 getScrollTarget 的函数”,使用 Quasar Framework (Vue)

Posted

技术标签:

【中文标题】“el.closest 不是 getScrollTarget 的函数”,使用 Quasar Framework (Vue)【英文标题】:"el.closest is not a function at getScrollTarget", using Quasar Framework (Vue) 【发布时间】:2018-03-21 11:56:16 【问题描述】:

我的模式由可以正常工作的卡片组成。现在我想在模态打开时在视口顶部放置“活动”卡。我正在尝试使用 getScrollTargetsetScrollPosition 执行此操作,但出现以下错误:

Uncaught TypeError: el.closest is not a function at getScrollTarget     (quasar.esm.js?8bfb:1384)
     at VueComponent.open (ModalTest.vue?4a7f:120) 
     at VueComponent.boundFn [as open] (vue.runtime.esm.js?ff9b:165)
     at VueComponent.openModal (Maplayout.vue?1988:60)
     at VueComponent.boundFn [as openModal] (vue.runtime.esm.js?ff9b:165)
     at Vue$3.eval (Maplayout.vue?1988:47)
     at Vue$3.Vue.$emit (vue.runtime.esm.js?ff9b:2202)
     at Object.$emit (quasar.esm.js?8bfb:198)
    at htmlElement.emitEventFunction (util.js?93ee:587)

模态组件如下所示:

<template>
    <q-modal ref="myModal" maximized>
      <q-modal-layout class="scroll">
        <div class="layout-padding">
          <q-card inline
                  center
                  style="min-width: 90vw"
                  v-for="test in tests"
                  :key="tests.id"
          >
            <q-card-media>
              <img :src="test.getAttribute('image')">
            </q-card-media>
            <q-card-main>
              <div> test.getAttribute('myAttribute') </div>
            </q-card-main>
          </q-card>
        </div>
      </q-modal-layout>
    </q-modal>
</template>
<script>
import 
  QCard,
  QCardMain,
  QCardMedia,
  QModal,
  QModalLayout,
  scroll
 from 'quasar'
const getScrollTarget, setScrollPosition = scroll
export default 
  name: 'myModal',
  components: 
    QCard,
    QCardMain,
    QCardMedia,
    QModal,
    QModalLayout,
    scroll
  ,
  computed: 
    ...myState(
      tests: state => state.mymodule.tests
    )
  ,
  methods: 
    open () 
      this.$refs.myModal.open()
      const element = document.getElementById('feature-listing').getElementsByClassName('item-image active')
      console.log('element: ', element)
      setScrollPosition(getScrollTarget(element), 0, 200)
    
  

</script>

console.log 的输出提供了有关在控制台中处于活动状态的element 的以下信息: [div#98729.item-image.js-fade.my-quick-fade-in.active, 98729: undefined]

我不太了解“未定义”部分...(数组的长度是 1...,所以可能不相关或其他什么...?!),因为 div 可以在控制台中打开对我来说看起来不错。

我正在尝试关注this in the docs。我还查看了“最接近”here 的 polyfill 的代码。

【问题讨论】:

【参考方案1】:

错误原因是没有引用有效的 div。当我使用 element[0] 时,它开始工作。

另外,模态中的滚动方法只有在模态正确打开后才会给出值,所以需要使用@open事件。详情请见this。

【讨论】:

以上是关于“el.closest 不是 getScrollTarget 的函数”,使用 Quasar Framework (Vue)的主要内容,如果未能解决你的问题,请参考以下文章