沒有內置功能來爲你做這個。
你可以創建自己的事件列表:
var EventNames = {
MOUSE_DOWN : "mousedown",
MOUSE_UP : "mouseup",
CLICK : "click",
// etc
};
但是,這並不能防止輸入錯誤,因爲這樣會EventNames.MOUZE_DOWN
只給你undefined
(這將可能由addEventListener()
被接受,但 - 顯然 - 不做你想做的)。
您可以創建一系列單獨的全局變量,然後如果你做的「常量」名稱的拼寫錯誤,瀏覽器應該給出一個錯誤(和你的IDE或棉絨產品可以檢測你的拼寫錯誤):
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()
等方法,只通過這些方法附加事件 - 如果你輸錯方法名,你肯定會得到一個錯誤。
哈哈,是的。在靜態語言中,您會遇到編譯器錯誤。在動態語言中,字符串與變量一樣安全。 (雖然沒有。) –
我個人從來沒有遇到類似這樣的事情,通過谷歌幾分鐘沒有提供任何東西。然而,我確實知道JavaScript有一個'const'關鍵字:https://developer.mozilla.org/en/JavaScript/Guide/Values%2C_Variables%2C_and_Literals#Constants – peterp
@Diodeus JavaScript會抱怨一個未定義的變量;所以不正確地輸入它會給你想要的結果。 – peterp