javascript - 如何通过单击选择元素的选项项来触发操作(Vue.js)?

标签 javascript html vue.js

作为 JS 对象的选项列表:

options: [{
  text: this.$t('analytics.pastDays', { days: 7 }),
  value: 7
}, {
  text: this.$t('analytics.pastDays', { days: 28 }),
  value: 28
}, {
  text: this.$t('analytics.pastDays', { days: 360 }),
  value: 360
}, {
  text: this.$t('analytics.customDate'),
  value: 7,
  method: () => { console.log('Worked') }
}],

选择元素:

<select
  class="i-select"
  v-model="value"
  @change="onChange($event)">
  <option
    v-for="option in options"
    :value="option.value"
    @click.stop.prevent="option.method($event)">
    {{ option.text }}
  </option>
</select>

正确知道控制台日志永远不会记录。

如何使analytics.CustomDate选项触发其方法?

最佳答案

我认为选项上的点击事件不起作用,我们可以利用它的change事件,(不确定选项元素是否不尊重onclick)

您可以检查此代码段中的解决方法

var yourOptions = [{
    text: 'analytics.pastDays',
    value: 7,
    method: function() { console.log('this one is selected (7).') }
  }, {
    text: 'analytics.pastDays',
    value: 28
  }, {
    text: 'analytics.pastDays',
    value: 360,
    method: function() { console.log('this one is selected (360).') }
  }, {
    text: 'analytics.customDate',
    value: 70,
    method: function() { console.log('this one is selected (70).') }
  }];      
  
 var vm = new Vue({
    el: '#app',
    data: {   
        options: yourOptions,
        value:''
    },
    mounted: function() {
        
    },
    methods: {
        onChange: function(value) {
            var selected = yourOptions.filter(function(obj) {
              return obj.value == value
            })
            if(selected.length > 0) {
              selected.forEach(function(option){ if(option.method) { option.method(); } })
            }
        }
    }
  })
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>VueJS</title>
    <script  src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.0.3/vue.js"></script>
</head>
<body>
    <div id="app">
        <select
          class="i-select"
          v-model="value"
          @change="onChange(value)">
          <option
            v-for="option in options"
            :value="option.value"
            >
            {{ option.text }}
          </option>
        </select>
    </div>


</body>

</html>

关于javascript - 如何通过单击选择元素的选项项来触发操作(Vue.js)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47707198/

相关文章:

javascript - 整个屏幕变灰,包括滚动条

javascript - 下划线表示多个嵌套级别数组

javascript - 如何在 Javascript 中创建类似 excel 迷你图的内联条形图?

html - 圆形边框不适用于 HTML 网站的 CSS 样式表

javascript - 如何制作典型格式(例如 PNG、JPG 等)的照片,以及用于像素级样式和脚本的 HTML Canvas 元素?

html - 如何更改选择选项中第一个元素的颜色?

javascript - 从 json 返回 html 标签,而不在express中转换为ascii

javascript - 如何在不创建 DOM 条目的情况下使用 v-for?

javascript - 带有 Vue 3 的 Vue 路由器引发错误 "Uncaught TypeError: Object(...) is not a function"

javascript - 如何使用 Vue.js 类设置计时器