远程jQuery验证不会触发验证

时间:2014-04-02 09:09:01

标签: javascript jquery jquery-validate

我不想在提交表单后刷新页面,所以我使用了form.preventDefault();不要这样做。我想验证表单然后(如果它是有效的),我想调用后端函数(通过ajax)向数据库插入一个新行。

一切都适用于第一次提交,但是对于第二次验证,它不会触发远程验证,因此当我尝试添加与最后一次相同的下一个SN时,我能够做到这一点。我无法理解为什么没有触发远程验证,而其他验证(如最小字符/最大字符)被触发没有任何问题。

代码:

$("#form").validate({
    onkeyup: false,
    onfocusout: false,
    rules: {
        sn: {
            required: true,
            minlength: 8,
            maxlength: 8,
            remote: {
                url: "ajax.php",
                type: "get",
                data: {
                    class: "board",
                    action: "IsFreeSN"
                }
            }
        }
    },
    messages: {
        sn: {
            required: "SN is required",
            minlength: "SN has to be 8 chars long",
            maxlength: "SN has to be 8 chars long",
            remote: "SN is already in database"
        }
    },
    submitHandler: function(form) {
        // Form is valid, so i am calling backend function for database insert
        form.preventDefault(); // preventing page reload
    }
});

正如我所说,当你第一次运行它(第一次提交)时,它有效。但是当你想再次这样做时(当然没有页面重新加载),它没有进行远程验证。

2 个答案:

答案 0 :(得分:1)

我做到了。如果与最后一个值具有相同的值,则jQuery Validator不会触发远程验证。它在页面刷新或重置功能时重置。解决方案是使用:

var validator = $("#form").validate({ ... });

成功验证后调用:

validator.resetForm();

答案 1 :(得分:0)

我确实使用了这个。

jQuery.validator.addMethod("idTurnoEstaEnUso", function (value, element)
{        
  var url = '/nonrest/Turnos/IdTurnoValida';
  var objetoIdTurno = { inputTextIdTurno: value };
  var respuesta = null;

  $.ajax({     
    async: false,
    url: url,
    type: 'post',
    contentType: 'application/json',
    data: ko.toJSON(objetoIdTurno),
    success: function (data) {
      if (data == true) {
        respuesta = true;
      } else {
        respuesta = false;
      }
    },
    error: function () {
      respuesta = false;
    }
  });

  if (respuesta == false) {
    return this.optional(element) || respuesta;
  }

  if (respuesta == true) {
    return this.optional(element) || respuesta;
  }

}, "El código está ya en uso.");