【问题标题】:Javascript Dynamically invoke shortcut keys combination function to shortcutjs pluginJavascript动态调用快捷键组合功能到shortcutjs插件
【发布时间】:2016-02-29 10:27:55
【问题描述】:

正在从服务器获取密钥组合。基于此,我正在分配键组合以动态运行。以下代码适用于循环中的最后一次迭代。下面的代码如何适用于所有迭代。

在我的页面中,我有两个按钮保存和取消,下面的代码适用于 for 循环中的最后一次迭代,这意味着如果我按下保存功能的键,btnCanel 按钮就会触发。任何建议。希望能理解我的问题。

$(document).ready(function fn() {
var keyCombination = new Object();
        keyCombination['btnAdd'] = "Alt+S";
        keyCombination['btnCancel'] = "Alt+C";

        for (var k in keyCombination) {
            if (keyCombination.hasOwnProperty(k)) {
                shortcut.add(String(keyCombination[k]), function () {
                    var btnAdd = document.getElementById(String(k));
                    btnAdd.focus();
                    btnAdd.click();
                });
            }
        }
});

如果我这样给予意味着它正在工作

shortcut.add("Alt+S", function () {
  var btnAdd = document.getElementById('btnAdd ');
  btnAdd .focus();
  btnAdd .click();
  });

shortcut.add("Alt+C", function () {
  var btnCancel = document.getElementById('btnCancel');
  btnCancel.focus();
  btnCancel.click();
  });

但如果我尝试动态添加它的覆盖帮助我解决这个问题。

提前致谢。

【问题讨论】:

  • 您对此有什么解决方案吗? Alt+S 在最后一个循环中被 Alt+C 覆盖,这就是它触发取消按钮总是点击的原因
  • @VishwaKumar 是的,我知道,但是有什么建议可以克服这个问题吗??
  • @VishwaKumar 我找到了解决方案

标签: javascript jquery jquery-plugins keyboard-shortcuts


【解决方案1】:

我在 document.ready 函数之外创建了一个单独的函数,现在它可以正常工作了。

$(document).ready(function fn() {
var keyCombination = new Object();
    keyCombination['btnAdd'] = "Alt+S";
    keyCombination['btnCancel'] = "Alt+C";
    for (var k in keyCombination) {
        if (keyCombination.hasOwnProperty(k)) {
            Set_KeyCombinations(k, keyCombination);
        }
    }
});

function Set_KeyCombinations(k, keyCombination) {
    shortcut.add(String(keyCombination[k]), function () {
        var eleId = document.getElementById(String(k));
        if (eleId) {
            if ($('#' + String(k).trim()).css('display') !== 'none' && eleId.getAttribute("disabled") !== "disabled") {
                eleId.click();
                eleId.focus();
            }
        }
    });
}

【讨论】:

    【解决方案2】:

    试试这个:

    var keyCombinations = [ "Ctrl+Shift+X" , "Ctrl+Shift+Y" ];
    
    for(var i=0; i<keyCombinations.length; i++){
    
      (function(shorcutCombination){
         shortcut.add(shorcutCombination,function() {
        alert("i am " + shorcutCombination);
         });
      })(keyCombinations[i]);
    
    }
    

    这个想法是您需要保留 keyCombinations[i] 的值 随着 i 在循环中增加。在这里测试:Openjs

    【讨论】:

    • 我有自己的解决方案来解决我的问题,现在它工作正常。
    猜你喜欢
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 2015-04-13
    相关资源
    最近更新 更多