jQuery验证怪癖 - 阻止提交

时间:2014-06-24 16:01:46

标签: jquery jquery-validate

如果触发了我的必填字段,则会阻止我的提交按钮。如果我填写,我必须在输入外单击以再次验证该字段,因此必须按两次提交。

如果提交处理程序导致此问题,是否有任何想法?

// FORM
// validate enquiry form
var product_form = jQuery('#product_enquiry_form');
jQuery(product_form).validate({ 
    onkeyup: true, 
    submitHandler: product_enquiry_submit,
    errorElement: 'div',
    wrapper: false,
    errorPlacement: function(error, element) {
        error.insertBefore(element); // default function
    }
});
// submit enquiry
function product_enquiry_submit(){
    jQuery.ajax({
        type: 'POST',
        url: jQuery(product_form).attr( 'action' ) + '?ajax=true',
        dataType: 'text',
        data: jQuery(product_form).serialize(),
        success: function(data){
            if (data == 'SUCCESS') {
                 jQuery(product_form).fadeOut(400, function() { 
                    jQuery('.message-sent').slideDown(400);
                 });
            }
            else if (data == 'BADCODE') {
                // robot submitting honeypot
            }
            else {
                alert('Message not sent, please try again.');
            }
        }
    });
}

1 个答案:

答案 0 :(得分:0)

一系列问题可能导致此问题。

1)var product_form = jQuery('#product_enquiry_form');

您的product_form变量已包含jQuery(),因此在引用它时,您无需再次将其包含在jQuery()内。你已经在好几个地方做过这个。

jQuery(product_form).validate({ ...

这就足够了......

product_form.validate({ ...

2)true不是onkeyup的有效值。默认情况下已启用此选项,因此将其设置为true可能会破坏事物。仅将其设置为false或函数。否则,就把它留下来。请参阅:http://jqueryvalidation.org/validate/#onkeyup

3)wrapper选项应该是一个“字符串”,表示像li等HTML元素,而不是布尔值false。如果您不需要包装label元素,请保留此选项。请参阅:http://jqueryvalidation.org/validate/#wrapper

否则,您的代码似乎工作正常:

DEMO:http://jsfiddle.net/hrT4C/