this.$refs[(“p” + index)].focus is not a function

后端 未结 1 2020
眼角桃花
眼角桃花 2021-01-21 03:54

I\'d like to turn a div into input box on click, so that the post (which is rendered inside a loop) can be edited.

Here is the button on the post:

相关标签:
1条回答
  • 2021-01-21 04:38

    After some debugging i found that this.$refs['p' + index] returns always an array containing one item which is your element, this.$refs.p0 returns also an array, so to deal with that try to access the one element like this.$refs['p' + index][0]

    new Vue({
      el: '#app',
      data: function() {
        return {
          posts: [{
              title: "post 1",
              content: "content 1"
            },
            {
              title: "post 2",
              content: "content 2"
            }
          ],
    
        }
      },
    
      methods: {
        setFocusEdit(index) {
    
    
          this.$refs['p' + index][0].focus();
        }
    
      },
      mounted() {
    
      }
    
    })
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    
    
    
    
    <div id="app">
      <div class='col-md-4 mt-3' v-for="(post, index) in posts" :key="index">
        <textarea readonly :ref="'p' + index" class="post-description">
          {{post.content}}
        </textarea>
        <a @click.prevent="setFocusEdit(index)" href="#">Edit Me</a>
      </div>
    </div>

    0 讨论(0)
提交回复
热议问题