是否有一种方法可以在用户选择条件更改后从选择下拉列表中选择一个新选项后重置上一个代码?
我有此脚本检查选择字段的值并根据条件运行代码。例如,如果选择值等于1,则代码将输入值对用户无法更改的输入字段。
jQuery
$('#mon_reason').on('change click', function (e) {
var reason = $('#mon_reason').val();
if(reason == 1){
$("#mon-worked").val(8.50);
$("#mon-adjust").attr("readonly", true);
$("#mon-adjust").val(0.00);
$("#mon-total").val(8.50);
} if(reason == 2) {
$("#mon-worked").val(0.00);
$("#mon-adjust").attr("readonly", true);
$("#mon-adjust").val(8.50);
$("#mon-total").val(8.50);
} if(reason == 3) {
$("#mon-worked").val(0.00);
$("#mon-adjust").attr("readonly", true);
$("#mon-adjust").val(8.50);
$("#mon-total").val(8.50);
} if(reason == 4) {
$("#mon-worked").val(4.25);
$("#mon-adjust").attr("readonly", true);
$("#mon-adjust").val(4.25);
$("#mon-total").val(8.50);
}if(reason == 5) {
$("#mon-worked").val(4.25);
$("#mon-adjust").attr("readonly", true);
$("#mon-adjust").val(4.25);
$("#mon-total").val(8.50);
}if(reason == 6 || reason == 7) {
$("#mon-worked").val();
$("#mon-adjust").attr("readonly", false);
$("#mon-adjust").val();
$("#mon-total").val(8.50);
$("#mon-adjust").on('keyup keydown change click keypress', function(){
var val1 = +$("#mon-adjust").val();
var val2 = +$("#mon-total").val();
$("#mon-worked").val(val2-val1);
});
}if(reason == 8) {
$("#mon-worked").val(8.50);
$("#mon-adjust").attr("readonly", false);
$("#mon-adjust").val();
$("#mon-adjust").on('keyup keydown change click keypress', function(){
var val3 = +$("#mon-worked").val();
var val4 = +$("#mon-adjust").val();
$("#mon-total").val(val3+val4);
});
}
});
});
html
<select class="worked-input adjustment-input" id="mon_reason" name="">
<option disabled value="" selected="selected" >
select an option ..
</option>
<option value="1" >
working
</option>
<option value="2">
Annual Leave Full Day - Paid
</option>
<option value="3">
Annual Leave Full Day - Unpaid
</option>
<option value="4">
Annual Leave Half Day - Paid
</option>
<option value="5">
Annual Leave Half Day - Unpaid
</option>
<option value="6">
Sick Leave
</option>
<option value="7">
AWOL
</option>
<option value="8">
Overtime
</option>
</select>
<input readonly id="mon-worked" />
<input readonly id="mon-adjust" />
<input readonly id="mon-total" />
我的问题:
如果用户选择“病假(6)或AWOL(7)”,则输入字段“ mon-udjust”和“ mon-total”将彼此减去,以使我们获得“ mon工作的价值” ”。
如果用户选择加班(8)选项,则将加在一起输入字段“ mon worked”和“ mon-udjust”,以使我们获得“ mon-total”的价值。
我面临的问题是,用户是否选择了病假(6)或AWOL(7),然后决定选择加班(8)代码
var val1 = +$("#mon-adjust").val();
var val2 = +$("#mon-total").val();
$("#mon-worked").val(val2-val1);
});
仍然运行,并且在用户选择其他选项后不会被取消。如果您首先选择加班(8),然后更改为病假(6)或AWOL(7),
$("#mon-adjust").on('keyup keydown change click keypress', function(){
var val3 = +$("#mon-worked").val();
var val4 = +$("#mon-adjust").val();
$("#mon-total").val(val3+val4);
});
此代码仍将运行,也会发生同样的情况。
如果条件已更改后,有什么方法可以将用户选择新的选项从选择下拉菜单中选择新选项后运行或删除上一个代码?
I have this script which checks the value of the select field and runs code depending on the condition. For example if the select value is equal to 1 then the code will input value into the input fields which a user cant change.
Jquery
$('#mon_reason').on('change click', function (e) {
var reason = $('#mon_reason').val();
if(reason == 1){
$("#mon-worked").val(8.50);
$("#mon-adjust").attr("readonly", true);
$("#mon-adjust").val(0.00);
$("#mon-total").val(8.50);
} if(reason == 2) {
$("#mon-worked").val(0.00);
$("#mon-adjust").attr("readonly", true);
$("#mon-adjust").val(8.50);
$("#mon-total").val(8.50);
} if(reason == 3) {
$("#mon-worked").val(0.00);
$("#mon-adjust").attr("readonly", true);
$("#mon-adjust").val(8.50);
$("#mon-total").val(8.50);
} if(reason == 4) {
$("#mon-worked").val(4.25);
$("#mon-adjust").attr("readonly", true);
$("#mon-adjust").val(4.25);
$("#mon-total").val(8.50);
}if(reason == 5) {
$("#mon-worked").val(4.25);
$("#mon-adjust").attr("readonly", true);
$("#mon-adjust").val(4.25);
$("#mon-total").val(8.50);
}if(reason == 6 || reason == 7) {
$("#mon-worked").val();
$("#mon-adjust").attr("readonly", false);
$("#mon-adjust").val();
$("#mon-total").val(8.50);
$("#mon-adjust").on('keyup keydown change click keypress', function(){
var val1 = +$("#mon-adjust").val();
var val2 = +$("#mon-total").val();
$("#mon-worked").val(val2-val1);
});
}if(reason == 8) {
$("#mon-worked").val(8.50);
$("#mon-adjust").attr("readonly", false);
$("#mon-adjust").val();
$("#mon-adjust").on('keyup keydown change click keypress', function(){
var val3 = +$("#mon-worked").val();
var val4 = +$("#mon-adjust").val();
$("#mon-total").val(val3+val4);
});
}
});
});
HTML
<select class="worked-input adjustment-input" id="mon_reason" name="">
<option disabled value="" selected="selected" >
select an option ..
</option>
<option value="1" >
working
</option>
<option value="2">
Annual Leave Full Day - Paid
</option>
<option value="3">
Annual Leave Full Day - Unpaid
</option>
<option value="4">
Annual Leave Half Day - Paid
</option>
<option value="5">
Annual Leave Half Day - Unpaid
</option>
<option value="6">
Sick Leave
</option>
<option value="7">
AWOL
</option>
<option value="8">
Overtime
</option>
</select>
<input readonly id="mon-worked" />
<input readonly id="mon-adjust" />
<input readonly id="mon-total" />
My issue:
if a user selects option sick leave(6) or AWOL(7) then the input fields "mon-adjust" and "mon-total" will subtract from one another to give us the value of "mon-worked".
if a user selects option overtime(8) then the input fields "mon-worked" and "mon-adjust" will be added together to give us the value of "mon-total".
The problem I am having is if a user chooses option sick leave(6) or AWOL(7) and then decides to choose overtime(8) the code
var val1 = +$("#mon-adjust").val();
var val2 = +$("#mon-total").val();
$("#mon-worked").val(val2-val1);
});
still runs and doesn't get cancelled after the user chooses a different option. The same happens if you choose overtime(8) first and then change to sick leave(6) or AWOL(7)
$("#mon-adjust").on('keyup keydown change click keypress', function(){
var val3 = +$("#mon-worked").val();
var val4 = +$("#mon-adjust").val();
$("#mon-total").val(val3+val4);
});
this code will still run.
Is there any way to reset or remove the previous code from running after a user chooses a new option from the select dropdown if a condition has changed?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您已经有一个Onchange事件。只需在运行时保存一个变量并在下次运行时检查其值以查看用户以前的工作时的值即可。
You already have an onchange event. Just save a variable when that runs and check it's value the next time it runs to see what the user did before.
我已经重写了脚本,因此当用户选择其他选项时,在执行的新代码中更加明确时,请撤消上一个重写的代码。以下代码中的一些添加也限制了输入字段的最低和最大。
总而言之,问题在于,在满足某个条件但没有撤销时,代码正在执行,因为在改变条件时我不够明确。
I have rewritten the script so now when a user selects a different option the previous rewritten code is undone by being more explicit in the new code which is executed. Some additions in the below code also limits the min and max of the input fields.
In summary, the issue was that code was being executed when a certain condition was being met but not being undone because I was not being explicit enough when conditions changed.