0

我创建了两个 JQuery 插件:_formValidator.validate()refreshTime 在 plugin 中_formValidator.validate()。我有一个用于生成错误消息的功能,名称为buildError,我通过单击按钮调用这两个插件。

我想知道插件中的buildError函数_formValidator.validate()是否被触发,插件refreshTime不会触发。

我的代码是:

 $(document).ready(function () {
     $("#submitchangepassword").click(function () {
         _formValidator.validate();
         refreshTime({ target: this });
     });
 });

buildError功能代码:

function buildError( config ) {
    var error = $('<div name="formError" id="formError' + config.controlToValidate.replace('#', '') + '" class="form-error-holder"><div class="form-error-icon"></div><div class="form-error"><span class="form-error">' + config.errormessage + '</span></div><div class="clear"></div></div>');
    error.hide();
    error.insertAfter( config.insertAfterControl );
    error.show('fast');
}
4

2 回答 2

0

有多种方法可以检查。最简单的方法是添加一个console.log,比如

$("#submitchangepassword").click(function () {
    console.log("submit password clicked!");
    _formValidator.validate();
    refreshTime({ target: this });
});

或者您可以添加警报:

$("#submitchangepassword").click(function () {
   alert("submit password clicked!");
    _formValidator.validate();
    refreshTime({ target: this });
});

...就个人而言,我更喜欢这种console.log方法。您可以通过打开开发人员的控制台来检查 Firefox 或 chrome 中的控制台输出。

[编辑] 我明白我误解了这个问题

您需要设置一个变量来执行此操作。因此,如果发生错误,请将全局变量(让我们调用它anErrorOccured)设置为 true。那么你可以做

$("#submitchangepassword").click(function () {
    _formValidator.validate();
    if(!anErrorOccured){
        refreshTime({ target: this });
    }
});

另一种可能的方法是您实现回调:

$("#submitchangepassword").click(function () {
    var self = this;
    _formValidator.validate({
        onSuccess:function(){
            refreshTime({ target: self });
        },
        onError:function(){
            alert("an error occured");
        }
    });
});

_formValidator函数做这样的事情:

_formValidator(o){
     //check validity

     if(isValid){
         if(o.onSuccess != undefined){
              o.onSuccess();
         }
     } else {
         if(o.onError != undefined){
              o.onError();
         }
     }
}
于 2013-09-18T08:34:10.203 回答
0

通过我的评论,我的意思是这样的:

var buildErrorFired = false;  // This is declared as a global

 $(document).ready(function () {
     $("#submitchangepassword").click(function () {
         if (!buildErrorFired){
             _formValidator.validate();
             refreshTime({ target: this });
         }
     });
 });

function buildError( config ) {
    buildErrorFired = true;
    var error = $('<div name="formError" id="formError' + config.controlToValidate.replace('#', '') + '" class="form-error-holder"><div class="form-error-icon"></div><div class="form-error"><span class="form-error">' + config.errormessage + '</span></div><div class="clear"></div></div>');
    error.hide();
    error.insertAfter( config.insertAfterControl );
    error.show('fast');
}

我不太了解您的项目,无法建议buildErrorFired = false;重置的位置。

于 2013-09-18T09:08:18.393 回答