在javascript中,我有像
这样的代码document.addEventListener("mousedown", mouseDownHandler);
偶尔我会胖手指像
document.addEventListener("mouzedown", mouseDownHandler);
javascript不会意识到我是个白痴,我会因为我的处理程序无法正常工作而感到困惑。
Actionscript3
指定事件常量,如此
MouseEvent.MOUSE_DOWN // equiv to the String "mouseDown"
如果我指责variable
或constant
,那么JS会对我生气,我可以快速解决问题。 JavaScript
是否有与此类似的东西,还是我需要为事件类型制作自己的JS伪常量?
答案 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