表单提交生命周期处理示例

提交流程控制概览

完整的表单提交生命周期管理,实现数据预处理、验证和结果处理

此示例演示如何使用kinlink API在表单提交前后处理数据。这允许您在提交表单前自动格式化或补充数据,以及在提交后执行特定操作,如显示成功消息或处理结果。

提交流程核心环节

  • 🔄 表单初始化:页面加载完成时的UI初始化
  • 提交前处理:数据验证、格式化、补全操作
  • 📤 数据传输:安全的API代理请求处理
  • 提交后处理:结果反馈、状态更新、错误处理
  • 🎯 用户体验:实时状态提示和操作引导

关键功能

  • 监听表单提交前事件进行数据预处理
  • 监听表单提交后事件处理结果反馈
  • 自动补全和格式化表单数据
  • 集成外部API调用和错误处理

代码示例

/**
* 示例9: 表单提交前后处理(自动修改数据示例)
* 功能:在表单提交前自动修改数据,如自动补全、格式化、添加新字段
* 所有提示统一用 showMessage
*/
(function () {
// 表单加载时初始化
kinlink.events.on(kinlink.FormEvents.FORM_LOADED, () => {
  try {
    // 创建提交按钮
    const submitButton = document.createElement('button');
    submitButton.type = 'button';
    submitButton.textContent = '测试提交表单';
    submitButton.style.margin = '10px 0';
    submitButton.style.padding = '8px 16px';
    submitButton.style.backgroundColor = '#3498db';
    submitButton.style.color = 'white';
    submitButton.style.border = 'none';
    submitButton.style.borderRadius = '4px';
    submitButton.style.cursor = 'pointer';

    submitButton.addEventListener('click', () => {
      // 触发表单提交
      kinlink.formApi.submit();
    });

    // 添加按钮到表单
    const formElement = document.querySelector('.ant-form') || document.body;
    formElement.insertBefore(submitButton, formElement.firstChild);
  } catch (error) {
    console.error('初始化提交按钮失败:', error);
  }
});

// 表单提交前处理(自动修改数据)
kinlink.events.on(kinlink.FormEvents.BEFORE_SUBMIT, (data) => {
  try {
    const { values } = data;
    
    // 自动补全:如果没有填写公司名,自动补全为"未填写"
    if (!values['单行文本框_10']) {
      values['单行文本框_10'] = '未填写';
      kinlink.formApi.showMessage(
        'info',
        '公司名未填写,已自动补全为"未填写"',
        3,
      );
    }
    
    // 自动格式化:手机号去除空格
    if (values['文字列__1行__2']) {
      values['文字列__1行__2'] = values['文字列__1行__2'].replace(/\s+/g, '');
      kinlink.formApi.showMessage('info', '手机号已自动去除空格', 3);
    }
    
    // 添加新字段:提交时间戳
    values['_autoSubmitTime'] = new Date().toISOString();
    kinlink.formApi.showMessage('info', '已自动添加提交时间戳', 3);
    
    // 允许提交
    return true;
  } catch (error) {
    console.error('表单提交前处理失败:', error);
    kinlink.formApi.showMessage('error', '提交前处理发生错误', 3);
    return false;
  }
});

// 表单提交后处理
kinlink.events.on(kinlink.FormEvents.AFTER_SUBMIT, (data) => {
  try {
    const { success, result } = data;
    console.log('表单提交结果:', success, result);
    
    if (success) {
      kinlink.formApi.showMessage('success', '表单提交成功!', 3);
    } else {
      kinlink.formApi.showMessage('error', '表单提交失败,请稍后重试', 5);
      console.error('提交失败原因:', result);
    }
  } catch (error) {
    console.error('表单提交后处理失败:', error);
    kinlink.formApi.showMessage('error', '提交后处理发生错误', 3);
  }
});
})();

使用说明

要使用此功能,只需将代码复制到您的kinlink自定义JavaScript中。您可以根据业务需求在提交前后添加自定义的数据处理逻辑,如验证、格式化、API调用等。

完整代码请下载查看:

9-表单提交处理.js

注意事项

在BEFORE_SUBMIT事件中返回false会阻止表单提交。请确保您的处理逻辑能够正确处理各种异常情况,避免影响正常的表单提交流程。

API参考

此示例使用了以下kinlink API:
  • kinlink.events.on(eventName, callback) - 注册事件监听器

  • kinlink.FormEvents.FORM_LOADED - 表单加载完成事件

  • kinlink.FormEvents.BEFORE_SUBMIT - 表单提交前事件

  • kinlink.FormEvents.AFTER_SUBMIT - 表单提交后事件

  • kinlink.formApi.submit() - 手动触发表单提交

  • kinlink.formApi.showMessage(type, message, duration) - 显示消息提示