2013-07-16 127 views
0

我在我的應用程序中有很多地方需要執行JS函數,並將它綁定到一些jQuery事件,如「更改」或「單擊」。爲了重構的目的,我想創建一個通用函數來幫助我完成這個任務。下面是我原來的想法:將jQuery作爲參數傳遞

function execute_and_track(trackEvent, action) { 
    action(); 
    trackEvent(function() { 
     action(); 
    }); 
} 

而且我認爲這樣使用它:

execute_and_track($("#ddl_Test").change, function() { 
    if ($("#ddl_Test").val().toUpperCase() == "OTHER") { 
     document.getElementById("txt_Test").style.display = "inline"; 
    } 
    else { 
     document.getElementById("txt_Test").style.display = "none"; 
     $("#txt_Test").val(""); 
    } 
}); 

不幸的是,這將引發一個錯誤:遺漏的類型錯誤:對象[對象全球]有「上」沒有方法。它看起來像我無法通過jquery更改作爲參數。任何人都可以幫助我解決這個邏輯問題,或者建議另一種爲這種重構創建通用函數的方法嗎?

回答

1

如果我明白了這個問題,我會改變方法。

試試這個新的(如jQuery插件)

$.fn.execute_and_track = function(eventName, func) { 
    this.each(function() { 
     func.call(this); // fix the scope 
     $(this).on(eventName,func); 
    }); 
    return this; 
} 

$("#ddl_Test").execute_and_track('change', function() { 
    if ($(this).val().toUpperCase() == "OTHER") { 
     this.style.display = "inline"; 
    } 
    else { 
     this.style.display = "none"; 
     $(this).val(""); 
    } 
}); 
+0

是的,這是使用jquery插件這裏是個好主意。它工作正常。謝謝。 –