我可以在以编程方式更改输入值时禁止运行MVC客户端验证吗?

时间:2013-08-14 07:04:39

标签: asp.net-mvc jquery-validate unobtrusive-validation asp.net-mvc-validation

我有一个表单,其中输入框预先填充了默认值。如果字段为空,则jQuery事件处理程序清除'focus'上的值并恢复'blur'的默认值。

$('form input').on('focus blur', function (event) {
  var eventTarget = $(this);
  if (eventTarget.val() === eventTarget.data('default')
      || eventTarget.val() === '') {
    if (event.type === 'focus') {
      eventTarget.val('').removeClass('empty');
    } else {
      eventTarget.val(eventTarget.data('default')).addClass('empty');
    }
  }
}).trigger('blur');

在提交(通过AJAX)之前,我清空所有包含默认值的字段并触发客户端验证(对于必填字段):

$('form').on('submit', function (e) {
  $('form input').each(function () {
      if ($(this).val() === $(this).data('default')) {
        $(this).val('');  // remove default value, so 'required' validation triggers on empty fields
      }
  });

  if ($('form').valid()) {
      $.ajax(...);
  } else {
    $('form input').trigger('blur');  // trigger 'blur' to restore default values
                                      // Problem: This clears the validation messages
  }
});

到目前为止,这么好,但在那之后,我的表单字段当然是空的。如果我再次触发'blur'事件,我可以恢复默认值,但这会使验证消息消失,可能是因为客户端验证再次运行并且看到字段不再​​为空。

但是,当我手动单击进入和退出表单域时,将恢复默认值并保留验证消息。两者都经历了相同的'模糊'处理程序。我无法弄清楚差异在哪里。

修改 我已经发现我可以完全禁用“模糊”验证:

$('form').validate().settings.onfocusout = false;

这暂时解决了我的问题,但我仍然想知道为什么当从脚本或用户交互中触发时,blur / focusout会有不同的反应。

0 个答案:

没有答案