Vue js获取存储在div中的隐藏输入的单个值

Posted

技术标签:

【中文标题】Vue js获取存储在div中的隐藏输入的单个值【英文标题】:Vue js get individual value of hidden input stored in div 【发布时间】:2020-04-04 12:29:02 【问题描述】:

Wassup 民谣,

我希望将隐藏输入的各个值存储在我的 div 中,即带有值的“卡片”。 我添加了一个触发 sendData() 方法的 onclick 事件。目前我总是得到值“1”,似乎 vue 无法区分各个 div。我必须编辑什么才能让它工作?

“card.vue” (...)

<div class="card text-white bg-primary mb-3" style="max-width: 18rem;" @click="sendData(3)">
      <div class="card-header">3 Points</div>
      <div class="card-body">
        <h5 class="card-title">
          <input type="number" value="3" id="cardValue" hidden />
        </h5>
        <p class="card-text">Some explanation.</p>
      </div>
    </div>

    <div class="card text-white bg-primary mb-3" style="max-width: 18rem;" @click="sendData()">
      <div class="card-header">2 Points</div>
      <div class="card-body">
        <h5 class="card-title">
          <input type="number" value="2"  ref="cardValue" id="cardValue" hidden />
        </h5>
        <p class="card-text">Some explanation.</p>
      </div>
    </div>

    <div class="card text-white bg-primary mb-3" style="max-width: 18rem;" @click="sendData()">
      <div class="card-header">1 Points</div>
      <div class="card-body">
        <h5 class="card-title">
          <input type="number" value="1" ref="cardValue" id="cardValue" hidden />
        </h5>
        <p class="card-text">Some explanation.</p>
      </div>
    </div>
  </div>
</template>
<script>
export default 
  data() 
    return 
      output: "",
      roomNumber: "",
      roomName: "",
      currentUsers: "",
      userValue: "",
      playerComment: "Enter a reason...",
      updatedAt: ""
    ;
  ,
  created() 
    axios
      .get("/public/api/getPlayerInfo/" + this.$route.params.currentRoom)
      .then(response => 
        this.output = response.data;

        this.roomNumber = response.data.currentRoom.id;
        this.roomName = response.data.currentRoom.roomName;
        this.updatedAt = response.data.currentRoom.updated_at;

        this.currentUsers = response.data.currentUsers;
        this.userValue = response.data.currentUsers[1].pivot.userValue;

        console.log(this.currentUsers);
        console.log(this.userValue);
      )
      .catch(e => 
        console.log(e);
      );
  ,
  computed: ,
  methods: 
    sendData() 
      const updatedCardValue = this.$refs.cardValue.value;
      this.userValue = updatedCardValue;
      axios
        .post("/public/values/" + this.$route.params.currentRoom, 
          _method: "put",
          userValue: this.userValue
        )
        .then(response => 
          console.log(response);
        )
        .catch(error => console.log(error));
    
  
;
</script>

【问题讨论】:

如果你所有的 refs 都是 ref="cardValue" 那么 vue 应该如何知道你想要哪个? @JaromandaX 是的,我必须在我的方法中编辑什么,才能像这样: const updatedCardValue = this.$ref.nameofelement.value?不想为每个输入编写代码行 您需要唯一的参考作为开始,然后 onclick 可以将参考编号发送到方法 - 就像您使用第一个一样 我该如何写下来?尝试使用 @click="sendData($this.ref)" 没有成功 不,这太复杂了... jsut @click="sendData('blah')" 设置ref="blah" - 只需更改每个块中的参考值...然后sendData(ref) const updatedCardValue = this.$refs[ref].value; 【参考方案1】:

让 ref 独一无二

更改 onclick 以发送参考值

<div class="card text-white bg-primary mb-3" style="max-width: 18rem;" @click="sendData('ref1')">
  <div class="card-header">2 Points</div>
  <div class="card-body">
    <h5 class="card-title">
      <input type="number" value="2"  ref="ref1" id="cardValue" hidden />
    </h5>
    <p class="card-text">Some explanation.</p>
  </div>
</div>

更改代码以使用发送的 ref 值

methods: 
  sendData(ref) 
    const updatedCardValue = this.$refs[ref]value;

【讨论】:

以上是关于Vue js获取存储在div中的隐藏输入的单个值的主要内容,如果未能解决你的问题,请参考以下文章

从另一个组件中的一个 Vue 单个组件获取数据?

如何利用Vue.js库中的v-show显示和隐藏元素

如何用JS 获取DIV的坐标位置?

在 Vue.js 中隐藏 div onclick

如何使用Vue.js中的按钮点击事件并获取按钮属性

如何使用 Vue.js 隐藏 div