在javascript中提交表单时动态导入模块

b5lpy0ml  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(298)

a有一个“添加到篮子”按钮,该按钮通过ajax提交一个包含所有产品详细信息的表单。此时,当加载网站时,负责该操作的模块会立即加载。不过,我希望它只在单击按钮时加载。这就是我到目前为止所做的:

$('form:not(.contact-form__items)').on('submit', event => {
  import('./modules/adding-products-to-basket.js')
  .then(module => {
    module.AddingProductsToBasket.addProductToBasket(event);
  });
});

模块内容:

export const AddingProductsToBasket = {

  addProductToBasket (event) {
    const _this = AddingProductsToBasket;
    event.preventDefault();
    $.ajax({
      url: 'basket',
      method: 'POST',
      data: $(event.currentTarget).serialize(),
      dataType: 'text',
      success: function(response) {
        _this.openAddedToBasketLightbox();
        }
      },
    });
  }

};

我没有在控制台中得到任何错误,但问题是 event.preventDefault() 在…内 addProductToBasket 不做它的工作,所以用户被带到篮子页面,而不是停留在“添加到篮子”按钮所在的页面上。

6fe3ivhb

6fe3ivhb1#

谢谢你们两位的帮助。它正在工作。
在窗体显示以下内容时加载模块:

if ($('form:not(.contact-form__items)').length) {
  import('./modules/adding-products-to-basket.js')
  .then(module => {
    $('form:not(.contact-form__items)').on('submit', event => {
      module.AddingProductsToBasket.addProductToBasket(event);
    });
  });
}

不是在表单加载时加载模块,而是在表单提交时加载模块:( event.preventDefault() 在里面 AddingProductsToBasket() (可以删除)

$('form:not(.contact-form__items)').on('submit', event => {
  event.preventDefault();
  import('./modules/adding-products-to-basket.js')
  .then((module) => {
    module.AddingProductsToBasket.addProductToBasket(event);
  });
});

相关问题