vue 用v-for添加的值,在js里获取不到

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue 用v-for添加的值,在js里获取不到相关的知识,希望对你有一定的参考价值。

<div @click.stop="changeMusicFromList" v-if="!isHistoryList">
<p v-for="(item,index) in musicList" :name="item" :number="index">item</p>
</div>
javascript(vue的方法里):
console.log(e.target); 这里返回的是<p name="沙龙 - 陈奕迅" number="0">沙龙 - 陈奕迅</p>
console.log(e.target.name); 这里反回的是undefined

e.target 指的是 p 标签这个 dom 元素;p 元素本身并没有 name 属性,所以你给标签上加的这个 name 不能这么获取;

var dom = e.target;
var name = dom.getAttribute('name'); // name = "沙龙 - 陈奕迅";这是通用的方式,获取绑定在标签上的数据,同样的,number 也可以这么取
var number = dom.getAttribute('number'); // number = 0

参考技术A name并不是(e.target)的值追问

但是使用事件代理时不是能够用e.target.name来确定触发dom吗?

参考技术B e.target.getAttribute("name")

在 Vue.js 中使用 v-for 多次渲染时,表单块会混乱

【中文标题】在 Vue.js 中使用 v-for 多次渲染时,表单块会混乱【英文标题】:Form block messes up when rendered multiple times using v-for in Vue.js 【发布时间】:2021-06-17 23:03:21 【问题描述】:

我正在尝试为 Vue.js 中字典列表中的每个条目多次呈现一个表单,但是当我在第二个条目中更改我的值时会发生什么,即单选按钮输入中的值第一个条目被更改,我无法弄清楚为什么会发生这种情况。

这是我使用的代码的 sn-p:

<div v-for="movie in watchList" :key="movie.movieTitle" class="movieBlock">
          <p>Rate this movie</p>
          <form>
            <div class="rate" style="display: inline-block;">
              <input style="visibility: hidden;" type="radio" id="star5" v-model="movie.newReviewRating" name="rate" value="5" />
              <label for="star5" title="text">5 stars</label>
              <input style="visibility: hidden;" type="radio" id="star4" v-model="movie.newReviewRating" name="rate" value="4" />
              <label for="star4" title="text">4 stars</label>
              <input style="visibility: hidden;" type="radio" id="star3" v-model="movie.newReviewRating" name="rate" value="3" />
              <label for="star3" title="text">3 stars</label>
              <input style="visibility: hidden;" type="radio" id="star2" v-model="movie.newReviewRating" name="rate" value="2" />
              <label for="star2" title="text">2 stars</label>
              <input style="visibility: hidden;" type="radio" id="star1" v-model="movie.newReviewRating" name="rate" value="1" />
              <label for="star1" title="text">1 star</label>
            </div>
          </form>   
      </div>

再一次,问题是,当我尝试更改呈现的第二个条目的选定输入时,第一个条目的值已更改,我不明白为什么会发生这种情况。

如果问题不清楚,我可以上传图片。

【问题讨论】:

删除 ID,因为您不能多次拥有相同的 ID。它可能会解决你的问题。我看不到任何其他问题。 谢谢比伦特!这对我有很大帮助并解决了我的问题! 【参考方案1】:

就像 Bülent Akgül 在 cmets 中所说,您不能重复 id,因此您需要更改每个元素的 id 并更改每个标签的属性 for

所以问题是因为你使用了一个属性标签,它的作用是触发具有 for id 的元素上的事件,因为每个循环的所有 id 和 for 都是相同的,它总是触发同一部电影。

<div v-for="movie in watchList" :key="movie.movieTitle" class="movieBlock">
  <p>Rate this movie</p>
  <form>
    <div class="rate" style="display: inline-block;">
      <input style="visibility: hidden;" type="radio" :id="`rating-$movie.movieTitle-star5`" v-model="movie.newReviewRating" name="rate-$movie.movieTitle" value="5" />
      <label :for="`rating-$movie.movieTitle-star5`" title="text">5 stars</label>
      <input style="visibility: hidden;" type="radio" :id="`rating-$movie.movieTitle-star4`" v-model="movie.newReviewRating" name="rate-$movie.movieTitle" value="4" />
      <label :for="`rating-$movie.movieTitle-star4`" title="text">4 stars</label>
      <input style="visibility: hidden;" type="radio" :id="`rating-$movie.movieTitle-star3`" v-model="movie.newReviewRating" name="rate-$movie.movieTitle" value="3" />
      <label :for="`rating-$movie.movieTitle-star3`" title="text">3 stars</label>
      <input style="visibility: hidden;" type="radio" :id="`rating-$movie.movieTitle-star2`" v-model="movie.newReviewRating" name="rate-$movie.movieTitle" value="2" />
      <label :for="`rating-$movie.movieTitle-star2`" title="text">2 stars</label>
      <input style="visibility: hidden;" type="radio" :id="`rating-$movie.movieTitle-star1`" v-model="movie.newReviewRating" name="rate-$movie.movieTitle" value="1" />
      <label :for="`rating-$movie.movieTitle-star1`" title="text">1 star</label>
    </div>
  </form>   
</div>

【讨论】:

以上是关于vue 用v-for添加的值,在js里获取不到的主要内容,如果未能解决你的问题,请参考以下文章

关于在VUE中下拉列表的option无法添加事件传值的问题

vue.js 中的v-for可以将遍历出来的值放入标签属性吗

在没有 v-if 和 v-for 的 Vue.js 中显示(添加、编辑)和删除多个列中的列表项

如何用vue.js给点过的li添加单独的class

使用 vue js 和 laravel 添加表数据时获取未定义的值

jquery.cookie.js 获取不到cookie的值