Javascript 模态显示上的onchange事件触发问题

Javascript 模态显示上的onchange事件触发问题,javascript,jquery,ajax,datatables,onchange,Javascript,Jquery,Ajax,Datatables,Onchange,我有一个“销售订单项目”模式,允许用户从选择列表中选择产品。当用户选择产品时,我会使用onChange事件通过Ajax将相关数据从产品源数据库加载到model上的其他输入(即产品描述和成本价格) 这在创建订单项目时可以正常工作,但是当用户尝试编辑订单项目时,当显示模式时会触发onChange事件,导致相关数据通过Ajax重新加载,但是用户可能已经更改了原始数据,因此数据始终恢复到其原始状态 例如,项目ABC123的成本价格默认为10英镑,但对于此特定销售订单,用户以8英镑的价格采购,因此当用户创

我有一个“销售订单项目”模式,允许用户从选择列表中选择产品。当用户选择产品时,我会使用onChange事件通过Ajax将相关数据从产品源数据库加载到model上的其他输入(即产品描述和成本价格)

这在创建订单项目时可以正常工作,但是当用户尝试编辑订单项目时,当显示模式时会触发onChange事件,导致相关数据通过Ajax重新加载,但是用户可能已经更改了原始数据,因此数据始终恢复到其原始状态

例如,项目ABC123的成本价格默认为10英镑,但对于此特定销售订单,用户以8英镑的价格采购,因此当用户创建新的“销售订单项目”并选择项目ABC123时,成本价格默认为10英镑,但用户随后手动将其更改为8英镑(仅适用于此销售订单项目!)。随后,如果他们试图编辑此“销售订单项目”,则会重新加载默认值,并将默认值恢复为10英镑

请参阅下面我的onchange代码:

    $(document).on('change', '#qsjob-cat', function(){
      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);
           }
        });     
    });
不确定它是否重要,但是,我正在使用用于Jquery的DataTables&Editor插件

我怀疑onchange事件会触发,因为DataTable\Editor可能会将数据插入modal show上的每个元素中,但我不确定如何实现我的目标

我相信这有一个明显的答案,但我对JS相对来说是新手要学的东西很多;-)

非常感谢您的建议

谢谢,
Chris

如果您事先知道某个项目是否正在创建或编辑,如果您知道该项目正在编辑,您可以“忽略”第一个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$自定义值。

谢谢SwiftLynx,我将尝试一下:)