2012-12-06 33 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