如何解决模态秀上onchange事件触发的问题
我有一个“销售订单项目”模式,允许用户从“选择”列表中选择产品。当用户选择产品时,我然后使用onChange事件通过Ajax将来自产品源数据库的相关数据加载到模式中的其他输入(即产品描述和成本价格)中。
这在创建订单项时很好用,但是当用户尝试编辑订单项时,在显示模式时会触发onChange事件,从而导致相关数据通过Ajax重新加载,但是用户可能已更改了原始数据,因此数据始终恢复为原始状态。
例如,默认情况下,物料ABC123的成本价为10英镑,但对于此特定的销售订单,用户以8英镑的价格进行采购,因此,当用户创建新的“销售订单物料”并选择物料ABC123时,成本价格默认为10英镑,但用户随后将其手动更改为8英镑(仅适用于此销售订单商品!)。然后,以后,如果他们尝试编辑此“销售订单商品”,则会重新加载默认商品,并且默认商品的价格为10英镑。
请在下面查看我的onchange代码:
placeholder
不确定是否重要,但是,我正在使用Jquery的DataTables&Editor插件。
我怀疑onchange事件会触发,因为DataTable \ Editor可能会将数据插入到模式展示中的每个元素中,但是我不确定还可以实现我的目标吗?
我敢肯定有一个明显的答案,但是我对JS还是比较陌生.... 很多可以学习;-)
任何建议都将不胜感激。
谢谢, 克里斯
解决方法
如果您事先知道某个项目是在创建或编辑的,则只要知道该项目正在编辑,就可以“忽略”第一个onchange事件。
let isEditing = true; // if you know that you are editing
let shouldFire = false;
$(document).on('change','#qsjob-cat',function(){
if (isEditing && !shouldFire) {
shouldFire = true; // sets it so it fires the next time
return; // returns without firing this time
}
var newVal = $('#qsjob-cat').val();
$.ajax({ url: "AjaxGetData.wc?ti=cat;cat&fl=title&key=cat:C:"+newVal,type: "POST",success: function(data) {
data = decodeURIComponent(data);
$('#qsjob-des').val(data);
}
});
});
或者,您可以只填写模型中的类型,然后加载并填写默认值(例如10 $),然后填写用户的8 $自定义值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。