VueJS, как получить значение текстового поля на основе его идентификатора

#javascript #vue.js #vuejs2 #vue-component #vuejs3

Вопрос:

у меня есть two text boxes , оба текстовых поля будут иметь значение.

но я хочу получить value of one text box based on id number то, что я войду.

введите описание изображения здесь

если я войду 1 it should show value of text box 1.

Вот что я попробовал, прямо сейчас он показывает данные из обоих текстовых полей.

шаблон:

 <input  v-model="textdata1" id="1" type="text" placeholder="i am id1, show my value">

<input v-model="textdata2" id="2" type="text" placeholder="i am id2, show my value">

<input v-model="searchid"  type="text" placeholder="which ids data you want, 1 or 2 ">

<button  @click="getvalue">RECEIVE</button>

<div>show value of id 1or2 here: {{id1data}}</div>
 

ВУЭЙС:

 <script>
import { defineComponent,ref } from 'vue'

export default defineComponent({
  setup() {
      const id1data =ref("");
      const id2data =ref("");

function getvalue(){
    
    this.id1data=this.textdata1;
    this.id2data=this.textdata2;
    
    }

return{
   id1data,
    id2data,
    getvalue,
}
}
})
</script>
 

Комментарии:

1. почему именно ID? вы уже используете v-model

2. я хочу получить данные, основанные на моем выборе, это может быть что угодно уникальное. я думал, что идентификатор может быть уникальным, поэтому я пытался получить данные по идентификатору.

Ответ №1:

Если вы настаиваете на использовании идентификаторов вместо этого, вот способ сделать именно это:

 <script>
import { defineComponent, ref } from "vue";

export default defineComponent({
  setup() {
    const value = ref("");

    const searchid = ref("");
    const searchidinput = ref("");

    function getvalue() {
      this.searchid = this.searchidinput
      const el = document.getElementById(this.searchid);
      if (el) {
        this.value = el.value
      }
    }

    return {
      value,
      searchid,
      searchidinput,
      getvalue,
    };
  },
});
</script>

<template>
  <input id="1" type="text" placeholder="i am id1, show my value" />

  <input id="2" type="text" placeholder="i am id2, show my value" />

  <input v-model="searchidinput" type="text" placeholder="which ids data you want, 1 or 2 " />

  <button @click="getvalue">RECEIVE</button>

  <div>show value of id {{ searchid ? searchid : "<none>" }} here: 
{{ value ? value : "none selected"}}
    
  </div>
</template>

<style scoped>
a {
  color: #42b983;
}
</style>
 

Комментарии:

1. Спасибо, я думаю, что это универсальный метод, но я получаю ошибку: searchidinput’ присваивается значение, но никогда не используется

2. Я обновил код, чтобы устранить проблему.

3. если я введу 1, он покажет значение из текстового поля 1, это нормально, если я введу 33 после этого, он все равно покажет значение идентификатора 1.

4. добавьте оператор else и назначьте this.value все, что вы хотите отобразить

5. @Fayakon это тоже сработало бы

Ответ №2:

Вот один из способов сделать это. Вы можете создать пару значений данных для каждого ввода.

 <script>
import { defineComponent, ref } from "vue";

export default defineComponent({
  setup() {
    const textdata1 = ref("");
    const id1data = ref("");

    const textdata2 = ref("");
    const id2data = ref("");

    const searchid = ref("");
    const searchidinput = ref("");

    function getvalue() {
      this.searchid = this.searchidinput;
      switch (this.searchid) {
        case "1":
          this.id1data = this.textdata1;
          break;
        case "2":
          this.id2data = this.textdata2;
          break;
      }
    }

    return {
      textdata1,
      id1data,
      textdata2,
      id2data,
      searchid,
      searchidinput,
      getvalue,
    };
  },
});
</script>

<template>
  <input v-model="textdata1" id="1" type="text" placeholder="i am id1, show my value" />

  <input v-model="textdata2" id="2" type="text" placeholder="i am id2, show my value" />

  <input v-model="searchidinput" type="text" placeholder="which ids data you want, 1 or 2 " />

  <button @click="getvalue">RECEIVE</button>

  <div>show value of id {{ searchid ? searchid : "<none>" }} here: 
{{ searchid === "1" ? id1data : searchid === "2" ? id2data : "none selected"}}
    
  </div>
</template>

<style scoped>
a {
  color: #42b983;
}
</style>

 

Вы также можете прибегнуть к использованию reactive() вместо этого для краткости и организации.