0

I have one remote rule and some other basic required rules. Oddly if my remote rule passes, but some of the other rules fail, it will go ahead and submit the form. I've tried moving the remote rule to the back or front of the list to see if it made a difference, and it didn't. Has anyone encountered this?

http://jsfiddle.net/LU5sU/7/ ( to pass validation, enter test in the promo code box. )

$('#ticket-form').validate({
onfocusout: false,
onkeyup: false,
onclick: false,
rules: {
    code: {
        required: true,
        remote: {
            url: "http://www.bobmurdoch.com/ajax.php",
            type: "post",
            async: false,
            data: {
                action: "check_code",
                code: function () {
                    return $("#code").val();
                }                    
            }
        }
    },
    first_name: {
        required: true
    },
    last_name: {
        required: true
    },
    company: {
        required: true
    },
    address: {
        required: true
    },
    city: {
        required: true
    },
    state: {
        required: true
    },
    zip: {
        required: true
    },
    phone: {
        required: true
    },
    email: {
        required: true,
        email: true
    },
    survey_question_1: {
        required: false
    }
},
messages: {
    code: {
        required: "Please enter a valid promo code",
        remote: "Please enter a valid promo code"
    },
    first_name: "Please enter a value for First Name",
    last_name: "Please enter a value for Last Name",
    company: "Please enter a value for Company",
    address: "Please enter a value for Address",
    city: "Please enter a value for City",
    state: "Please enter a value for State",
    zip: "Please enter a value for Zip/Postal Code",
    phone: "Please enter a value for Phone",
    email: {
        required: "Please enter a valid e-mail address",
        email: "Please enter a valid e-mail address"
    }
},
showErrors: function (errorMap, errorList) {
    var errors = '';
    for (var i in errorList) {
        errors = errors + errorList[i].message + "\n"
    }
    if (errors != '') {
        alert(errors);
    }
}
});
4

1 回答 1

0

按照的在线文档remote:,我从中删除async: false,remote:它似乎按预期工作。

根据文档:

$("#myform").validate({
  rules: {
    email: {
      required: true,
      email: true,
      remote: {
        url: "check-email.php",
        type: "post",
        data: {
          username: function() {
            return $("#username").val();
          }
        }
      }
    }
  }
});

jsFiddle 演示

您修改后的代码:

    code: {
        required: true,
        remote: {
            url: "http://www.bobmurdoch.com/ajax.php",
            type: "post",
            data: {
                action: "check_code",
                code: function () {
                    return $("#code").val();
                }                    
            }
        }
    },

根据 OP 的评论进行编辑:

通过删除用于在弹出窗口中放置错误消息的自定义函数并使用默认errorPlacement:函数,我可以证明这是有效的。输入.invalid在无效时显示类,.valid在有效时显示类。您的问题在其他地方,与我的解决方案无关。

见演示:http: //jsfiddle.net/LU5sU/11/

于 2012-12-16T17:19:05.553 回答