提交前收听语义 UI 表单验证错误

Listen to Semantic UI form validation errors before submit

使用语义 UI 表单、模态和验证,我有一个模态表单,如果表单无效(提交时会发生),我不希望关闭模态。

阻止模式关闭的唯一方法是向提交按钮添加 disabled class。

我想(实时)收听表单并根据当前表单验证状态打开和关闭 disabled class。

我只能在提交表单后才能让它工作,但不是实时的

$('#myForm')
    .form({
        title: {
            identifier  : 'title',
            rules: [
                {
                    type   : 'empty',
                    prompt : 'Please enter a title'
                },
                {
                    type   : 'length[2]',
                    prompt : 'At least 6 characters'
                }
            ]
        }
    },
    {
        onSuccess: function() {
            $('#submit').removeClass('disabled');
        },
        onFailure: function() {
            $('#submit').addClass('disabled');
        }
    }
);

不要使用禁用提交,而是确保即使单击提交(模态批准)按钮也能保持模态打开,并将关闭模态的决定传递给语义 UI 表单验证事件(即 onSuccess) .

类似这样的东西:

$('.ui.modal').modal({
        onApprove : function() {
          //Submits the semantic ui form
          //And pass the handling responsibilities to the form handlers,
          // e.g. on form validation success
          $('.ui.form').submit();
          //Return false as to not close modal dialog
          return false;
        }
    });

var formValidationRules =
{
    title: {
        identifier  : 'title',
        rules: [
            {
                type   : 'empty',
                prompt : 'Please enter a title'
            },
            {
                type   : 'length[2]',
                prompt : 'At least 6 characters'
            }
        ]
    }
}

var formSettings =
{
    onSuccess : function() 
    {
      //Hides modal on validation success
      alert("Valid Submission, modal will close.");
      $('.modal').modal('hide');
    }
}

$('.ui.form').form(formValidationRules, formSettings);

请注意,"OnApprove" 事件仅在您单击带有 class "ok" 的模态按钮时触发。 所以你需要一个像这样的模态按钮:

<div class="ui ok green basic inverted button">
  <i class="checkmark icon"></i>
  Submit
</div>

这是我创建的一个扩展的工作 plunker 代码来证明这一点: http://plnkr.co/edit/5fK7UuJIm7QTJGiu23NL?p=preview

您可以使用语义 UI API 来防止提交表单。

$('.submit.button').api({
    beforeSend: function(settings) {
        return false;
    }
});

我遇到了同样的问题,并与语义开发人员联系。请注意,他们将在 2.0 发布后重新审视一些额外的、明显的、缺失的表单行为。 现在你可以在他们的 github 仓库(form.js 文件)上查看这个分支: https://github.com/Semantic-Org/Semantic-UI/tree/next

使用权宜之计 is valid 如果表单有效,returns true/false

例如

if ( $('form').form('is valid') ) {
  // do something
}

这将在 2.0

@DruidKuma 和@Oniisaki 的解决方案组合对我有用:

var formValidationRules;

$(function() {
  return $('.ui.modal').modal({
     onApprove: function() {
       if ($('.ui.form').form('is valid')) {
       return true;
       } else {
       return false;
       }
     }
  });
});

formValidationRules = {
  fields: {
    name: 'empty'
  }
  // Additional validation fields would go here
};

$(function() {
  return $('.ui.form').form(formValidationRules);
});

要详细说明 onApprove 回调,请注意,除了由 @DruidKuma 表示的 .ok(技术上 .action .ok class 选择器之外,还有其他 class .action .positive.action .approve 的选择器也会触发 onApprove.

我知道这是旧的 post,现在情况可能已经改变了。 None 以上解决方案对我来说都是有效的,但我在任何地方都找不到缺失的部分。这就是我最终实现它的方式:

$("#myModal").modal({
    onApprove: function(e){
        $('#myModal .ui.form').submit();
        if (!$('#myModal .ui.form').form('is valid')) {
            return false;
        }

        // Process the form data

        return true;
    }
});

希望对大家有所帮助。