【问题标题】:Access selected text (not value) of a select element with Vue使用 Vue 访问选择元素的选定文本(不是值)
【发布时间】:2017-10-22 08:37:14
【问题描述】:

只是试图通过 Vue 访问选择元素的选定文本(不是值):

var App = window.App = new Vue({
  el: '#app',
  data: {
    style: '5'
  },
  computed: {
    calctitle: function() {
      return this.otype.text;
    }
  }
});

只是一个示例样式对象:

$item = new stdClass();
$item->value = 5;
$item->text = 'Name 1';
$style = array($item);
...

在这里我尝试创建一个绑定,因为如果我不提交表单,因为选项值为“[object Object]”,但我需要真正的 int 值。

<p>{{calctitle}}</p>
<select v-model="style" name="style">
    <option>Choose style</option>
    <?php foreach ($style as $item) : ?>
        <option value="<?php echo $item->value; ?>"  v-bind:otype="{value: <?php echo $item->value; ?>, text: '<?php echo $item->text; ?>'}"><?php echo $item->text; ?></option>
    <?php endforeach ?>
</select>

【问题讨论】:

    标签: vue.js vuejs2


    【解决方案1】:

    我认为您无法通过计算来做到这一点,因为您不会将选定的选项存储在任何地方,而只会存储它的值。

    相反,您可以创建一个数据项并使用 select 上的 change 事件来拉取所选选项并从其 textContent 设置您的数据值。

    new Vue({
      el: '#app',
      data: {
        selectedText: '',
        style: '5'
      },
      methods: {
        updateFromSelectedText(event) {
          const options = event.target.options;
          const selectedOption = options[options.selectedIndex];
    
          this.selectedText = selectedOption.textContent;
        }
      }
    });
    <script src="//cdnjs.cloudflare.com/ajax/libs/vue/2.3.3/vue.min.js"></script>
    <div id="app">
    <p>{{selectedText}} and {{style}}</p>
    <select v-model="style" name="style" @change="updateFromSelectedText">
        <option>Choose style</option>
        <option value="1">One</option>
        <option value="2">Two</option>
        <!--option value="<?php echo $item->value; ?>"  v-bind:otype="{value: <?php echo $item->value; ?>, text: '<?php echo $item->text; ?>'}"><?php echo $item->text; ?></option-->
    
    </select></div>

    【讨论】:

    • 如果我提交表单,这里的选项值如何保留?
    • &lt;option&gt; 的值绑定到option.value,因此表单将包含数字作为选择的值。
    • 我没有“选项”js对象,所以我不能使用v-for="option in options"
    • 我已将其修改为使用硬编码的&lt;options&gt;v-for 与问题无关。
    • 这行得通,谢谢,但不知何故,这么简单的事情有很多代码......?
    猜你喜欢
    • 2019-08-21
    • 1970-01-01
    • 2023-04-02
    • 2012-11-08
    • 1970-01-01
    • 2019-05-15
    • 2016-03-17
    • 2013-08-06
    • 2022-07-11
    相关资源
    最近更新 更多