0

我有各种触发各种警报消息的锚标签和输入按钮。警报消息已经构建为函数。触发器有不同的类。我创建了单独的脚本来让这些触发器中的每一个触发它们各自的功能。现在我试图通过构建一个函数来简化这个过程,该函数将动态地附加正确的警报消息函数和正确的触发器类。

我创建了一个 allTriggers 变量(如下所示),我可以在其中加载每个触发器的所有类。

var allTriggers = $('.firstColumn a, .uploadAttachment, .tabGroup .tab a, .checkForChanges')

不,这是我正在努力的部分。我想构建一个函数,将正确的警报消息(函数)附加到正确的触发器

换句话说...

如果 allTriggers 的值 = 类 .uploadAttachment 的触发器,则执行函数 uploadFunction。

如果 allTriggers 的值 = 类 .firstColumn a 的触发器,则执行函数 removeMessageFunction。

等等。

我想这样做,以便程序员稍后可以进来并根据需要向这个简单的 var 和函数添加触发器和警报,它将填补我已经工作的脚本的其余部分的空白。

我正在处理的功能类似于下面的功能,但这不起作用

function popupOKFunction() {
        if (allTriggers == '.firstColumn a') {
                removeMessageFunction ();
        }
        if (allTriggers == '.uploadAttachment') {
                uploadFunction ();
        } 
}
4

1 回答 1

0

您可以使用关于 JavaScript 的两个事实:1)一个可以(几乎)使用任何字符串作为对象属性的名称;2)函数是一等公民,可以像(再次 - 几乎)大多数值一样使用。

所以对你有用的不是一个函数——而是一个对象:

var controlHandlers = {
  '.firstColumn a': removeMessageFunction,
  '.uploadAttachment': uploadFunction,
  ...
};

...然后您可以使用类似...的内容对其进行迭代

for (var selector in controlHandlers) {
   $(selector).click(controlHandlers[selector]);  
}

更新:如果您最终决定只使用一个函数,相同的方法将很有用 - 但要显示不同的消息:这些消息将作为参数在此函数中发送。像这样:

var controlMessages = {
  '.firstColumn a': "Do not ever touch this link! Ever!",
  '.uploadAttachment': "Now I'm angry!",
};
...
for (var selector in controlMessages) {
  $(selector).click(function() { 
    alertingFunction(controlMessages[selector]);
  });
}

alertingFunction在这种情况下,应定义为采用单个参数 - 要显示的消息。

于 2012-06-24T01:26:56.237 回答