Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止在';提交处理程序';在jQuery验证插件中_Jquery_Firefox_Jquery Validate - Fatal编程技术网

防止在';提交处理程序';在jQuery验证插件中

防止在';提交处理程序';在jQuery验证插件中,jquery,firefox,jquery-validate,Jquery,Firefox,Jquery Validate,我有一个表单,我正在使用jQuery验证插件进行验证。 我还有一个自定义的密码强度验证脚本 我已经将提交处理程序设置为调用密码验证函数(validatePwdValid),如果密码有效,我希望表单提交,如果密码无效,则不提交。我已经在Chrome上运行了,但在Firefox上没有。因为它在Chrome中工作,我认为其中一个函数的参数列表中的“事件”导致了这个问题,但即使有了它,我也无法让它在FireFox中工作 function validatePwdValid() { if (pwdV

我有一个表单,我正在使用jQuery验证插件进行验证。 我还有一个自定义的密码强度验证脚本

我已经将提交处理程序设置为调用密码验证函数(validatePwdValid),如果密码有效,我希望表单提交,如果密码无效,则不提交。我已经在Chrome上运行了,但在Firefox上没有。因为它在Chrome中工作,我认为其中一个函数的参数列表中的“事件”导致了这个问题,但即使有了它,我也无法让它在FireFox中工作

function validatePwdValid() {
    if (pwdValid == true) {
        form.submit();
    } else {
        e.preventDefault();
        $('.form-validate-password .alert-error').removeClass('hide');
    }
};

$(".form-validate-password").validate({
    submitHandler: function(e) {
        //this runs when the form validated successfully
        validatePwdValid();
    }
});
有什么想法吗


添加更多代码以使其更清晰(但讽刺的是更复杂)


这里有一把小提琴:


如果您键入少于8个字符的密码并提交,您将在Chrome中收到一条错误消息,但在Firefox中不会。Firefox仍将提交表单。

您的脚本有一些问题

一,。
validatePwdValid()
是在
submitHandler
回调之外定义的。函数具有“作用域”,它本质上决定了它们可以访问哪些变量。函数的范围由函数的定义位置决定(禁止使用称为
.call()
…的特殊实用方法,但这对于快速回答来说太多了)


submitHandler()
回调中的
scope
与定义了
validatePwdValid()
的作用域不同。因此,
validatePwdValid()
不知道“e”是什么。而且,您没有在任何地方定义pwdValid。。。它是未定义的<代码>未定义==true始终计算为false。。。因此永远不会调用form.submit()。

我已经有一段时间没有使用validate插件了,但假设在提交表单时运行验证,e.preventDefault()将停止表单提交。因此,只需将“e”传递给将停止提交的函数

下面是一个SAN验证插件的快速示例:

function validatePwdValid(e) {
    //define pwdValid somewhere
    var pwdValid;

    if (!pwdValid) {
        e.preventDefault();
        alert('event stopped');
    }
    //if pwdValid submits
};

$("#form").on('submit', function(e){
    //validate form
    validatePwdValid(e);
});

编辑:

下面是更新后的示例。Firefox没有全局事件对象,因此必须传入

// Function to check that pwdValid is true, and if so submit the form, otherwise don't.
function validatePwdValid(form, event) {
    if (pwdValid == true) {
        form.submit();
    } else {
        alert('prevent submit');
        event.preventDefault();
        $('.form-validate-password .alert-error').removeClass('hide');
    }
}

// When the user enters the password, run validatePwdStrength
pwdInput.bind('change keyup input', validatePwdStrength);

$(".form-validate-password").validate({
    submitHandler: function(form, event) {
        //this runs when the form validated successfully
        validatePwdValid(form, event);
    }
});
测试在Firefox中工作。

将e传递给validatePwdValid函数我尝试过,但没有成功…编辑了我的答案,检查出来是的,我感觉代码有一段时间不正确。Chrome理解这一点很奇怪吗?这些函数位于另一个“容器”函数中,这有区别吗?pwdValid是在这里看到的函数外部定义的,但在父函数内部。为了减少混乱,我错过了这一点,抱歉。我已经从脚本中添加了周围的代码以将其放到上下文中。最初我省略了它,试图让事情更清楚。在过去的几个小时里,我一直在研究,试图解决它,但基本上我是我的深度和急需帮助!你能复习较长的代码并把我踢向正确的方向吗?我没看到你已经做了一把小提琴。。。设置应该类似
// Function to check that pwdValid is true, and if so submit the form, otherwise don't.
function validatePwdValid(form, event) {
    if (pwdValid == true) {
        form.submit();
    } else {
        alert('prevent submit');
        event.preventDefault();
        $('.form-validate-password .alert-error').removeClass('hide');
    }
}

// When the user enters the password, run validatePwdStrength
pwdInput.bind('change keyup input', validatePwdStrength);

$(".form-validate-password").validate({
    submitHandler: function(form, event) {
        //this runs when the form validated successfully
        validatePwdValid(form, event);
    }
});