【问题标题】:Executing list of functions jquery执行函数列表 jquery
【发布时间】:2015-04-29 16:37:09
【问题描述】:

我想执行一个函数列表,如下所示:

window.onkeypress = [f1(), f2(), f3(), fn() ...] ...

有可能吗???

更新

好吧,关键是对于 event.keycode 我必须执行一个函数列表,但我想设置通用类型的函数列表,例如:

JQueryExtension.eventKeyCode[33] = [f1(), f2(), fn() ...];

JQueryExtension.KeyBoardControl = function (event) {

    if (event.shiftKey && event.keyCode == 33) {
        JQueryExtension.eventKeyCode[event.keyCode];
        return;
    }
};`

最后做这个:

window.onkeypress = JQueryExtension.KeyBoardControl;

:D !!

更新

好的,像这样的东西,可能有用吗??

JQueryExtension.eventKeyCode = new Array();

JQueryExtension.KeyBoardControl = function (event) {

        if (event.shiftKey && event.keyCode == 33) {

            for (var i = 0; i < JQueryExtension.eventKeyCode.length; i++) {
                if (JQueryExtension.eventKeyCode[i] == event.keyCode) {
                    var listOfFunctions = JQueryExtension.eventKeyCode[i];
                    for (var j = 0; j < listOfFunctions.length; j++) {
                        listOfFunctions[j]();
                    }
                }
            }

            return;
        }
    };
window.onkeypress = JQueryExtension.KeyBoardControl;

更新

天哪,像这样的:

var functionsForKeyCodeOne = [
            {
                keyCode: 33,
                theFunction: Billing.TheKnockOutDataTableViewModelCustomerSearcher.mainData([])
            },
            {
                keyCode: 33,
                theFunction: Billing.SetModalVisibility("searcherCustomerModal", "show")
            },
            {
                keyCode: 33,
                theFunction: $('#searcherCustomerModal').on('shown.bs.modal', function() {
                    $("#txtNameCustomer").focus();
                })
            }
        ];

        JQueryExtension.eventKeyCode.push(functionsForKeyCodeOne);

window.onkeypress = JQueryExtension.KeyBoardControl;

JQueryExtension.KeyBoardControl = function (event) {

        if (event.shiftKey && event.keyCode == 33) {

            for (var i = 0; i < JQueryExtension.eventKeyCode.length; i++) {
                if (JQueryExtension.eventKeyCode[i].keyCode == event.keyCode) {
                    var listOfFunctions = JQueryExtension.eventKeyCode[i];
                    for (var j = 0; j < listOfFunctions.length; j++) {
                        listOfFunctions[j].theFunction();
                    }
                }
            }

            return;
        }
    };

:哦!!!

【问题讨论】:

  • 是的,您可以将函数对象放入数组中,然后编写代码顺序执行它们。
  • 嗯,重点是对于 event.keycode 我必须执行一个函数列表,但我想设置通用类型的函数列表,例如:JQueryExtension.eventKeyCode[33] = [f1(), f2(), fn() ...]; JQueryExtension.KeyBoardControl = function (event) { if (event.shiftKey &amp;&amp; event.keyCode == 33) { JQueryExtension.eventKeyCode[event.keyCode]; return; } };

标签: javascript jquery


【解决方案1】:

你可以这样使用:

window.onkeypress = function() {
    f1();
    f2();
    f3();
    .
    .
    .
};

注意:确保函数在范围内。

【讨论】:

  • 嗯,关键是对于 event.keycode 我必须执行一个函数列表,但是我想设置通用类型的函数列表,例如:JQueryExtension.eventKeyCode[33] = [f1(), f2(), fn() ...]; JQueryExtension.KeyBoardControl = function (event) { if (event.shiftKey &amp;&amp; event.keyCode == 33) { JQueryExtension.eventKeyCode[event.keyCode]; return; } };
【解决方案2】:

为什么不这样做

$(function(){
  $('your_selector').on('keypress', function(){
    f1();
    f2();
    ...
    ...
    ..a list of functions here
  });
});

或者像这样

$(function(){
  $(window).keypress(function(e){
    f1();
    f2();
    ...
    ...
    ..a list of functions here
  });
});

【讨论】:

  • 嗯,关键是对于 event.keycode 我必须执行一个函数列表,但是我想设置通用类型的函数列表,例如:JQueryExtension.eventKeyCode[33] = [f1(), f2(), fn() ...]; JQueryExtension.KeyBoardControl = function (event) { if (event.shiftKey &amp;&amp; event.keyCode == 33) { JQueryExtension.eventKeyCode[event.keyCode]; return; } };
【解决方案3】:

在绑定的侦听器函数中遍历您的函数数组并调用每个函数:

var funcs = [f1, f2, f3, f4];

$(window).on("keypress", function() {
  
  for(var i in funcs) {
    if(!funcs.hasOwnProperty(i)) {
      continue;
    }
    
    funcs[i]();
  }
  
});

【讨论】:

    【解决方案4】:

    我已经解决了我的问题,完整的实现在这里::

    首先我定义了一些变量:

    JQueryExtension.eventKeyCode = new Array(); //The Functions List of keycode
        JQueryExtension.availableKeyCode = new Array(); // The key code that I want evaluate
        JQueryExtension.notExistElementOnArray = -1; // For indexOf if not exists on the combination that I require
    

    数据准备:

    Billing.PreconditionalExecutions = function() {
    
            for (var i = 33; i <= 40; i++) {
                JQueryExtension.availableKeyCode.push(i);
            }
    
            JQueryExtension.eventKeyCode.push({
                    keyCode: 33,
                    theFunctionList: [
                        function() {
                            Billing.TheKnockOutDataTableViewModelCustomerSearcher.mainData([]);
                        },
                        function() {
                            BootStrapExtension.SetModalVisibility("searcherCustomerModal", "show");
                        },
                        function() {
                            BootStrapExtension.OnShowModal("searcherCustomerModal",
                            [
                                function() {
                                    JQueryExtension.SetFocusedElement("txtNameCustomer");
                                }
                            ]);
                        }
                    ]
                },
                {
                    keyCode: 34,
                    theFunctionList: [function() { BootStrapExtension.SetModalVisibility("searcherProductModal", "show"); }]
                },
                {
                    keyCode: 35,
                    theFunctionList: [function() { theMainViewModel.newBillingCommand(); }]
                },
                {
                    keyCode: 36,
                    theFunctionList: [function() {}]
                },
                {
                    keyCode: 37,
                    theFunctionList: [function() { theMainViewModel.finishBillingCommand(); }]
                },
                {
                    keyCode: 38,
                    theFunctionList: [function() { theMainViewModel.holdCommand(); }]
                },
                {
                    keyCode: 39,
                    theFunctionList: [function() { theMainViewModel.abortCommand(); }]
                },
                {
                    keyCode: 40,
                    theFunctionList: [function() { theMainViewModel.canceledCommand(); }]
                }
            );
        };
    

    调用函数:

    Billing.PreconditionalExecutions();
    

    在我这样设置window.onkeypress 函数后:

    window.onkeypress = JQueryExtension.KeyBoardControl;
    

    执行是这样的:

    JQueryExtension.KeyBoardControl = function (event) {
    
            if (event.shiftKey && (JQueryExtension.availableKeyCode.indexOf(event.keyCode) != JQueryExtension.notExistElementOnArray)) {
    
                for (var i = 0; i < JQueryExtension.eventKeyCode.length; i++) {
                    if (JQueryExtension.eventKeyCode[i].keyCode == event.keyCode) {
                        var listOfFunctions = JQueryExtension.eventKeyCode[i];
                        for (var j = 0; j < listOfFunctions.theFunctionList.length; j++) {
                            listOfFunctions.theFunctionList[j]();
                        }
                        break;
                    }
                }
    
                return;
            }
        };
    

    结束!!! :D

    任何关于代码优化的建议我都会感谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-01
      • 2015-04-22
      • 1970-01-01
      • 2016-08-25
      相关资源
      最近更新 更多