如何知道何时触发JQuery函数?

时间:2013-09-18 07:44:33

标签: jquery asp.net jquery-ui jquery-plugins

我创建了两个JQuery插件:_formValidator.validate()refreshTime 在插件_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');
}

2 个答案:

答案 0 :(得分: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();
         }
     }
}

答案 1 :(得分: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;重置的位置。