Vue.js为数字输入设置最大变量

时间:2019-03-14 15:08:48

标签: javascript html vue.js

我有以下vue js脚本:

 <template>
    <div>
        <div v-if='cart.length > 0'>
            <h1>Your Cart</h1>
        <template>
            <fieldset v-for='product in cart'>
                <image :src='product.image'
                <h4>{{product.name}}</h4>
                <input type='number' :max='quantCheck'/>
                <h5>{{product.price}}</h5>
            </fieldset>
        </template>
        </div>
        <div v-else><h1>Your Cart Is Empty</h1></div>
        <br />
        <h5>Subtotal: </h5>
        <h5>Shipping: Free for a limited time!</h5>
        <h2>Total: </h2>
    </div>
    </template>
    <script>
    const apiURL = 'http://localhost:3000';
    import axios from 'axios';
    export default {
        data() {
            return {
                cart: [
                        {
                    id:"56461",
                    name:"lilly",
                    quantity: 2,
                    price: 30.10
                    }, {
                    id:"1253",
                    name:"wild",
                    quantity: 1,
                    price: 31.10
                    }
                    ]
                }
            },
        methods: {
                let quantCheck = this.cart.product.quantity

        }
        }
    </script>

我一直无法找到一种好的方法来完成类似的工作。

数量是可变的,我想也许我可以创建一个函数来检查每个输入后的数字,并在数字超过该数字时弹出错误,但这并不是目标。

如果这是一个愚蠢的问题,无论如何,对不起,但是请提前感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

您可以将HTML表单验证用于输入(类型=“数字”):

<input type='number' :max='product.quantity'/>

如果输入的值大于max,则它将在提交表单时显示错误

答案 1 :(得分:0)

我相信您要做的是根据<input type='number' :max='quantCheck'/>中项目的quantity属性来限制cart中项目的数量。如果是这种情况,您的组件中有几处可以改进。

首先,您将:max="quantityCheck"绑定到您的输入。查看您的组件,您已经在方法选项中定义了quantityCheck

methods: {
    let quantCheck = this.cart.product.quantity
}

这是错误的,没有方法声明。您需要直接使用quantity属性限制字符数:

new Vue({
  el: '#app',
  template: `
  <div>
    <fieldset v-for='product in cart'>
        <h4>{{product.name}}</h4>
        <input type='number' :max="product.quantity"/>
        <h5>{{product.price}}</h5>
    </fieldset>
  </div>`,
  data: () => ({
      cart: [
        {
          id: "56461",
          name: "lilly",
          quantity: 2,
          price: 30.10
        },
        {
          id: "1253",
          name: "wild",
          quantity: 1,
          price: 31.10
        }
      ]
    })
  });
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app"></div>

上面的方法可以进行测试,请输入一个高于数量的值,并且输入应突出显示blur

如果您想要更好的验证,我建议使用Vee-Validate作为验证输入的简单方法。

使用VeeValidate

Vue.use(VeeValidate);

new Vue({
  el: '#app',
  template: `
      <div>
        <fieldset v-for='product in cart'>
            <h4>{{product.name}}</h4>
            <input v-validate="'max_value:'+product.quantity" :name="product.name" type="number">
            <span v-if="errors.first(product.name)">Quantity cannot be more than {{product.quantity}}</span>
            <h5>{{product.price}}</h5>
        </fieldset>
      </div>`,
  data: () => ({
    cart: [{
        id: "56461",
        name: "lilly",
        quantity: 2,
        price: 30.10
      },
      {
        id: "1253",
        name: "wild",
        quantity: 1,
        price: 31.10
      }
    ]
  })
});
<script src="https://cdn.jsdelivr.net/npm/vee-validate@latest/dist/vee-validate.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app"></div>