2012-12-06 36 views
1

我我自己的滚动jQuery的形式验证的一个项目我工作中存在。我正在定义在输入元素上进行数据验证所需的验证类型。检查功能从jQuery插件

我要检查,如果在我的插件存在此验证函数调用它(所有插件本身内)前。

之前我已经使用:

if($.isFunction(window['functionName'])) 
    window['functionName'](); 

然而,这似乎并没有我的插件内工作:

(function($) { 
    $.fn.validateForm = function(options) { 

     ... 

     findInputs(); 

     function validateRequired(input) { 

     } 

     function findInputs() { 

      ... 

      if($(this).attr("data-validate")) 
      { 
       // Get list of required validation functions 
       var toValidate = $(this).attr("data-validate").split(/\s+/); 

       for(var i = 0; i < toValidate.length; i++) { 
        // Hardcoded function name call for testing 
        if($.isFunction(window['validateRequired'])) 
         window['validateRequired'](); 
       } 
      } 
     } 
    } 
+0

它应该在硬编码值的插件中工作。你确定if语句正在达成吗? –

+0

揭掉我使用,如果($ isFunction(窗口[ '的validate- Required'])。) 的console.log( '是'); else console.log('no'); 并得到“不”输出多次(在我的形式OFC每个输入) – Titan

回答

1

处理这种情况最好的办法就是声明你的功能作为对象常量的一部分。这样,你可以参考你的插件中的文字,如下所示:

(function($) { 
    var methods = { 
     validateRequired: function(input) 
     { 
      // STUB 
     } 
    }; 

    $.fn.validateForm = function(options) { 
     function findInputs() { 

      if($.isFunction(methods['validateRequired'])) methods['validateRequired'](); 

     } 
    }; 
}); 
+0

这个作品完全谢谢你 – Titan

0

我不是JS专家,但试试这个:

if(typeof (someFunction) == 'function') { 
// do something 
} 

编辑

或l IKE在此,使用功能名称作为字符串:

if(typeof this["functionName"] == "function") { 
    this["functionName"](); //it exists, call it 
} 

我发现这个在这里:

javascript: how to judge a function name exists? /看尼克Craver答案。

通过谷歌搜索是这样的:“功能名存在的javascript”

如果您正在寻找一些关于jQuery的 - 尝试用JavaScript关键字来代替jQuery的搜索。 jQuery是一个用javascript编写的框架。

+0

是,将工作,但我想查一个函数使用字符串存在,而不是实际的功能本身 – Titan

+0

我更新了我的答案。 – Kamil