html - 将 %+- 附加到输入字段 View

标签 html css vue.js vuejs2 vue-slider-component

我正在使用一个 vue 组件,它与一个输入字段是双向绑定(bind)的。

我只想在输入字段 View 中向该值附加一个 +- 和一个 % 符号。我不想更改实际值,因为这会导致组件出现问题。

这是我要找的:

enter image description here

这是我的:

enter image description here

使用这段代码:

<form class="form-container">

  <label for="changePercent" class="move-percent-label">Move Market</label>
  <input class="move-percent" id="changePercent" v-model="value.value" type="number">

  <span class="middle-line"></span>
  <vue-slider v-bind="value" v-model="value.value"></vue-slider>

  <div class="control-buttons">
    <button @click="" class="primary-button">Apply</button>
    <button @click.prevent="value.value = 0;" class="tertiary-button">Reset</button>
  </div>

</form>

----------------更新--------------------

按照下面的答案使用计算属性。

好:

enter image description here

不好

enter image description here

所以我需要它来双向工作

最佳答案

要让另一个值始终格式化为计算属性:

new Vue({
  el: '#app',
  data: {
    value: {value: 0},
    // ..
  },
  computed: {
    readableValue() {
      return (this.value.value => 0 ? "+" : "-" ) + this.value.value + "%";
    }
  }
})

为 slider 创建一个编辑器并显示格式化

为了得到你想要的,我们必须用两个输入做一个小把戏。因为您希望用户在 <input type="number"> 中进行编辑但也想显示 +15%无法显示在 <input type="number"> 中(因为 +% 不是数字)。所以你必须做一些显示/隐藏,如下所示:

new Vue( {
  el: '#app',
  data () {
    return {
    	editing: false,
    	value: {value: 0},
    }
  },
  methods: {
  	enableEditing() {
      this.editing = true;
      Vue.nextTick(() => { setTimeout(() => this.$refs.editor.focus(), 100) });
    },
    disableEditing() {
      this.editing = false;
    }
  },
  computed: {
    readableValue() {
      return (this.value.value > 0 ? "+" : "" ) + this.value.value + "%";
    }
  },
  components: {
    'vueSlider': window[ 'vue-slider-component' ],
  }
})
/* styles just for testing */
#app { margin: 10px; }
#app input:nth-child(1) { background-color: yellow }
#app input:nth-child(2) { background-color: green }
<div id="app">
  
  <input :value="readableValue" type="text" v-show="!editing" @focus="enableEditing">
  <input v-model.number="value.value" type="number" ref="editor" v-show="editing" @blur="disableEditing">
  <br><br><br>
  <vue-slider v-model="value.value" min="-20" max="20">></vue-slider>

</div>
<script src="https://unpkg.com/vue@2.5.13/dist/vue.min.js"></script>
<script src="https://nightcatsama.github.io/vue-slider-component/dist/index.js"></script>

关于html - 将 %+- 附加到输入字段 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49163108/

相关文章:

css - 如何为 IE 更改 `select` 元素?

node.js - 如何使用库导入来编译 C 文件到 WebAssembly 文件 (Emscripten)

javascript - Vue 属性定义警告,即使它是在实例上定义的

javascript - 如何将Vue添加到现有的Webpack项目中

jquery - 单击复选框时添加和删除 div

javascript - 密码强度检查器

html - 如何在用户单击链接时打开移动设备的 map 应用程序?

html - 如何去除wordpress中文本之间的空白

jquery - 如何在 CSS 中管理#homeSub 的尺寸,以便当我将鼠标从 homeBox 移动到 home Sub 时它不会消失?

具有多个类的 CSS 管道选择器