繁体   English   中英

在JavaScript中将变量作为function()调用

[英]Calling variable as function() in Javascript

我在如何将变量作为函数调用时遇到麻烦。 我已经对其进行了研究,但似乎不适用于我的代码。 知道我的代码有什么问题吗? 谢谢。

首先是HTML

<a class="showhide" id="SampleID"><i class="fa fa-chevron-up"></i></a>

然后script

// Function for collapse hpanel
$('.showhide').on('click', function (event) {
    event.preventDefault();
    var id = $(this).attr("id").toString();
    //console.log("ShowHide: " + id);

    setTimeout(function () {
        var fn = window[id];
        fn();
    },200);
});

function SampleID() {
    alert("111");
}

但这表明

未捕获的TypeError:fn不是函数

注意:我尝试使用eval()及其工作方式。 但是我读到,使用eval()不好,这就是为什么我试图找到替代方法的原因。

对我有用

 // Function for collapse hpanel $('.showhide').on('click', function (event) { event.preventDefault(); var id = $(this).attr("id").toString(); setTimeout(function () { var fn = window[id]; fn(); }, 200); }); function SampleID() { alert("111"); } 
 .showhide { height: 100px; width: 100px; background-color: #444444; border: 5px solid pink; cursor: pointer; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="showhide" id="SampleID"><i class="fa fa-chevron-up"></i></div> 

这似乎工作正常吗?

 // Function for collapse hpanel $('.showhide').on('click', function (event) { event.preventDefault(); var id = $(this).attr("id").toString(); //console.log("ShowHide: " + id); setTimeout(function () { var fn = window[id]; fn(); },200); }); function SampleID() { alert("111"); } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <a class="showhide" id="SampleID"><i class="fa fa-chevron-up">TEST</i></a> 

我建议使用data-方法在DOM中定义JavaScript信息:

 var showHideFunctions = [{ id: "sample-id", func: function() { console.log("Sample function fired"); } }]; function showHideClick(event) { event.preventDefault(); var id = event.target.getAttribute("data-function-id"); console.log("ShowHide: " + id); setTimeout(function() { showHideFunctions.find(function(entry) { return id == entry.id; }).func(); }, 200); } document.querySelectorAll(".showhide") .forEach(function(elm) { elm.addEventListener("click", showHideClick); }); 
 <p class="showhide" data-function-id="sample-id">Test</p> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM