javascript的事件常量?

时间:2011-12-08 22:22:55

标签: javascript javascript-events constants mouseevent

在javascript中,我有像

这样的代码
document.addEventListener("mousedown", mouseDownHandler);

偶尔我会胖手指像

document.addEventListener("mouzedown", mouseDownHandler);

javascript不会意识到我是个白痴,我会因为我的处理程序无法正常工作而感到困惑。

Actionscript3指定事件常量,如此

MouseEvent.MOUSE_DOWN // equiv to the String "mouseDown"

如果我指责variableconstant,那么JS会对我生气,我可以快速解决问题。 JavaScript是否有与此类似的东西,还是我需要为事件类型制作自己的JS伪常量?

3 个答案:

答案 0 :(得分:2)

没有预定义的常量/属性可用于为addEventListener定义事件。

删除下面的原始答案(以及revision history):
Event对象定义了以下常量。使用Firefox 8.0和以下代码:

  • alert(Object.keys(Event).map(function(name){return name + "\t" + Event[name]}).join('\n'))

答案 1 :(得分:2)

没有为您执行此操作的内置功能。<​​/ p>

您可以创建自己的活动列表:

var EventNames = {
  MOUSE_DOWN : "mousedown",
  MOUSE_UP   : "mouseup",
  CLICK      : "click",
  // etc
};

但这并不能保护你免受拼写错误,因为EventNames.MOUZE_DOWN只会给你undefined(这可能会被addEventListener()接受但显然 - 不能做你想要的事情)

您可以创建一系列单独的全局变量,如果您在“常量”名称上输入错误(并且您的IDE或lint产品可能会检测到错别字),浏览器应该会出错:

var Event_MOUSE_DOWN = "mousedown",
    Event_MOUSE_UP   = "mouseup",
    // etc

但当然,“全球化是邪恶的”旅的成员已经开始在阅读上述内容时开始在嘴里泡沫。通过将所有代码(包括那些“常量”)包装在一个立即执行的大型匿名函数中,您可以在没有全局变量的情况下执行上述操作,或者您可以执行以下操作:

// YNH: "Your Namespace Here" (insert your own namespacing
//                             code as desired)
var YNH_Events = {
   validEvents : ["mouseup","mousedown","click","etc"],

   bindEvent = function(element, eventType, handler, isCustomEvent) {
      if (!isCustomEvent && -1 === this.validEvents.indexOf(eventType))
         throw "Invalid event type requested: " + eventType;

      if (element.addEventListener)
         element.addEventListener(eventType, handler, false);
      else if (element.attachEvent)
         element.attachEvent("on" + eventType, handler);
      else
         element["on" + eventType] = handler;
   }
}

YNH_Events.bindEvent(someElement, "mousedown", function() { });         // OK
YNH_Events.bindEvent(someElement, "customevent", function() { }, true); // OK
YNH_Events.bindEvent(someElement, "mouzedown", function() { });     // Error!

当然,关于使用Array.indexOf()的常见警告适用,即旧版浏览器不支持,但您可以按照MDN,blah,blah,blah的描述进行填充。

或者您可以像jQuery一样定义自己的.mousedown().click()等方法并仅通过这些方法附加事件 - 如果您输入方法名称错误,肯定会收到错误。

答案 2 :(得分:1)

也许使用jQuery?一个小问题的大转换,但是jQuery为很多JS处理程序设置了别名函数,如果你拼写错误的函数名,你肯定会收到错误。

即,

document.addEventListener("mousedown", mouseDownHandler); // right
$(document).mousedown(mouseDownHandler); // right

document.addEventListener("mouzedown", mouseDownHandler); // wrong, no error
$(document).mouzedown(mouseDownHandler); // wrong, throws error