Javascript form.io如何触发模糊的自定义验证?

Javascript form.io如何触发模糊的自定义验证?,javascript,formio,Javascript,Formio,在form.io form builder中,我正在添加自定义验证,但默认设置是在更改时触发验证,我想将其设置为“在模糊时” 我在“自定义验证”选项卡上尝试了以下代码: let field = document.querySelector('input[name="data[nametest]"]'); field.addEventListener("blur", checkValidation); function checkValidation() { console.log('c

在form.io form builder中,我正在添加自定义验证,但默认设置是在更改时触发验证,我想将其设置为“在模糊时”

我在“自定义验证”选项卡上尝试了以下代码:

let field = document.querySelector('input[name="data[nametest]"]');
field.addEventListener("blur", checkValidation);




function checkValidation() { 
console.log('checking...');
          valid = (input.length > 5) ? true : 'Test name must be at least 5 characters long' ;
        }
代码在blur上运行,但没有显示错误。有效的全局变量设置为正确的错误消息,只是没有显示在表单上。我注意到文本字段上的字符越多,事件在blur上触发的次数越多,我非常感谢您的帮助。
谢谢

在Form Builder视图中时,将禁用有效性检查。您可以在组件设置模式中测试简单验证:

现在,如果你想触发一个模糊的动作,你必须考虑到自定义验证不是持久的,并且是在每次评估时计算的,这意味着在它被评估之后对它进行的任何处理都不会影响组件本身。您需要将事件直接附加到组件实例中

您可以通过两种方式实现这一点:

  • 使用隐藏组件
  • 在表单中创建一个隐藏组件,并将其设置为“非持久”(您不想存储值,只需运行),然后定义一个自定义默认脚本以在呈现的表单上运行

    const{root}=instance;
    常数comp=根?root.getComponent('key'):null;
    如果(公司){
    //删除任何侦听器以避免重复
    公司关闭(“模糊”);
    //定义模糊侦听器上的
    公司名称('blur',()=>{
    console.log('blur');
    });
    }
    
  • 表格准备就绪
  • Formio.createForm(document.getElementById('Formio'),form)。然后((Formio)=>{
    const component=formio.getComponent('key');
    if(组件){
    on('focus',()=>{
    console.log('focus');
    });
    在('blur',()=>{
    console.log('blur');
    });
    }
    });
    
    以下是一个工作示例: