简体   繁体   English

如何不允许输入字段值大于其他值

[英]How not to allow input field value greater then other

I have several dynamic fields inside which I have some values, the first field is Total Amt and other are some dynamic fields and then one more Bal Amt which is initially opposite to total amount.我有几个动态字段,其中有一些值,第一个字段是Total Amt ,其他字段是一些动态字段,然后还有一个Bal Amt ,最初与总数相反。

suppose Total Amt=500 then Bal Amt=-500 in my dynamic field one field is there which will be there always ie tender Cash假设Total Amt=500然后Bal Amt=-500在我的动态字段中存在一个字段,该字段将始终存在,即tender Cash

So what I am trying to do is所以我想做的是

Tender cash can be greater then Total Amount like if Total Amount = 500 then Tender cash can be 550 and then Bal Amt automatically will be +50 Tender cash可以大于Total Amount就像 Total Amount = 500 那么 Tender cash 可以是 550 然后 Bal Amt 自动将是 +50

But there are several other fields I want them to restrict when Total bal is 0 then it should not accept input or alert or console但是还有其他几个字段我希望它们在 Total bal 为 0 时进行限制,然后它不应该接受输入或警报或控制台

Like if Total Amt=500 tender cash=500 || 550就像如果Total Amt=500 tender cash=500 || 550 tender cash=500 || 550 then all other will not take any input tender cash=500 || 550然后所有其他人将不接受任何输入

if Total Amt=500 tender cash 50 then other can take inputs til bal Amt=0 once bal Amt=0 the other should not take input.如果Total Amt=500 tender cash 50那么其他人可以接受输入直到bal Amt=0一旦 bal Amt=0 其他人不应该接受输入。

I am using computed property to calculation, I don't know how to do above things.我正在使用计算属性进行计算,我不知道如何做上述事情。

Code代码

 new Vue({ el: '#app', data() { return { totalAmt: 500, paymentMode: [{ "PAYMENTCODE": "TC", "PAYMENTNAME": "Tender Cash" }, { "PAYMENTCODE": "CC", "PAYMENTNAME": "Credit Card" }, { "PAYMENTCODE": "Cp", "PAYMENTNAME": "Coupn" }, { "PAYMENTCODE": "ptm", "PAYMENTNAME": "PayTM" }, { "PAYMENTCODE": "Cr", "PAYMENTNAME": "Credit" }, { "PAYMENTCODE": "SW", "PAYMENTNAME": "Swiggy" }, { "PAYMENTCODE": "BB", "PAYMENTNAME": "uber Eats" }, { "PAYMENTCODE": "WE", "PAYMENTNAME": "Zomato" }] } }, computed: { balAmt() { // sum of inputs of paymentMode const sum = this.paymentMode.reduce((a, b) => a + (+b.Amount || 0), 0); return sum - this.totalAmt; } } })
 <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> <div id="app"> <div> <label>Total Amt</label> <input type="text" v-model="totalAmt"> </div> <div v-for="mode in paymentMode" :key="mode.PAYMENTCODE" class="form-group col-xs-12 col-sm-12 col-md-4 col-lg-4 col-xl-4"> <label>{{mode.PAYMENTNAME}}</label> <input type="text" v-model="mode.Amount"> </div> <div> <label>Bal Amt</label> <input type="text" :value="balAmt"> </div> </div>

I have to do this with Vue.js only我只需要用 Vue.js 来做这件事

检查这张图片

You can do something like this -你可以做这样的事情 -

I have used :disabled我用过:禁用

<input type="text" v-model="mode.Amount" :disabled="balAmt>=0 && mode.PAYMENTCODE!='TC'">

 new Vue({ el: '#app', data() { return { totalAmt: 500, paymentMode: [{ "PAYMENTCODE": "TC", "PAYMENTNAME": "Tender Cash" }, { "PAYMENTCODE": "CC", "PAYMENTNAME": "Credit Card" }, { "PAYMENTCODE": "Cp", "PAYMENTNAME": "Coupn" }, { "PAYMENTCODE": "ptm", "PAYMENTNAME": "PayTM" }, { "PAYMENTCODE": "Cr", "PAYMENTNAME": "Credit" }, { "PAYMENTCODE": "SW", "PAYMENTNAME": "Swiggy" }, { "PAYMENTCODE": "BB", "PAYMENTNAME": "uber Eats" }, { "PAYMENTCODE": "WE", "PAYMENTNAME": "Zomato" }] } }, computed: { balAmt() { // sum of inputs of paymentMode const sum = this.paymentMode.reduce((a, b) => a + (+b.Amount || 0), 0); return sum - this.totalAmt; } } })
 <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> <div id="app"> <div> <label>Total Amt</label> <input type="text" v-model="totalAmt"> </div> <div v-for="mode in paymentMode" :key="mode.PAYMENTCODE" class="form-group col-xs-12 col-sm-12 col-md-4 col-lg-4 col-xl-4"> <label>{{mode.PAYMENTNAME}}</label> <input type="text" v-model="mode.Amount" :disabled="balAmt>=0 && mode.PAYMENTCODE!='TC'"> </div> <div> <label>Bal Amt</label> <input type="text" :value="balAmt"> </div> </div>

 new Vue({ el: '#app', data() { return { totalAmt: 500, paymentMode: [{ "PAYMENTCODE": "TC", "PAYMENTNAME": "Tender Cash" }, { "PAYMENTCODE": "CC", "PAYMENTNAME": "Credit Card" }, { "PAYMENTCODE": "Cp", "PAYMENTNAME": "Coupn" }, { "PAYMENTCODE": "ptm", "PAYMENTNAME": "PayTM" }, { "PAYMENTCODE": "Cr", "PAYMENTNAME": "Credit" }, { "PAYMENTCODE": "SW", "PAYMENTNAME": "Swiggy" }, { "PAYMENTCODE": "BB", "PAYMENTNAME": "uber Eats" }, { "PAYMENTCODE": "WE", "PAYMENTNAME": "Zomato" }] } }, computed: { balAmt() { // sum of inputs of paymentMode const sum = this.paymentMode.reduce((a, b) => a + (+b.Amount || 0), 0); return sum - this.totalAmt; } }, methods: { onKeyUp(evt) { if (this.balAmt > 0) { let id = evt.target.id if (id !== 'TC') { let paymentMode = this.paymentMode.find(mode => mode.PAYMENTCODE === id) paymentMode.Amount = '' } } } } })
 <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> <div id="app"> <div> <label>Total Amt</label> <input type="text" v-model="totalAmt"> </div> <div v-for="mode in paymentMode" :key="mode.PAYMENTCODE" class="form-group col-xs-12 col-sm-12 col-md-4 col-lg-4 col-xl-4"> <label>{{mode.PAYMENTNAME}}</label> <input :id="mode.PAYMENTCODE" type="text" v-model="mode.Amount" @keyup="onKeyUp"> </div> <div> <label>Bal Amt</label> <input type="text" :value="balAmt"> </div> </div>

you could set display flex to the div that contains both label and input and then apply the css directives applied as below:您可以将 display flex 设置为包含标签和输入的 div,然后应用如下应用的 css 指令:

 new Vue({ el: '#app', data() { return { totalAmt: 500, paymentMode: [{ "PAYMENTCODE": "TC", "PAYMENTNAME": "Tender Cash" }, { "PAYMENTCODE": "CC", "PAYMENTNAME": "Credit Card" }, { "PAYMENTCODE": "Cp", "PAYMENTNAME": "Coupn" }, { "PAYMENTCODE": "ptm", "PAYMENTNAME": "PayTM" }, { "PAYMENTCODE": "Cr", "PAYMENTNAME": "Credit" }, { "PAYMENTCODE": "SW", "PAYMENTNAME": "Swiggy" }, { "PAYMENTCODE": "BB", "PAYMENTNAME": "uber Eats" }, { "PAYMENTCODE": "WE", "PAYMENTNAME": "Zomato" }] } }, computed: { balAmt() { // sum of inputs of paymentMode const sum = this.paymentMode.reduce((a, b) => a + (+b.Amount || 0), 0); return sum - this.totalAmt; } } })
 .payment-mode { display: flex; } .payment-mode > * { flex: 1; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> <div id="app"> <div class="payment-mode"> <label class="payment-name">Total Amt</label> <input class="payment-field" type="text" v-model="totalAmt"> </div> <div v-for="mode in paymentMode" :key="mode.PAYMENTCODE" class="payment-mode form-group col-xs-12 col-sm-12 col-md-4 col-lg-4 col-xl-4"> <label class="payment-name">{{mode.PAYMENTNAME}}</label> <input class="payment-field" type="text" v-model="mode.Amount"> </div> <div class="payment-mode"> <label class="payment-name">Bal Amtdasdsadsadsad</label> <input class="payment-field" type="text" :value="balAmt"> </div> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM