Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript的事件常量?_Javascript_Javascript Events_Constants_Mouseevent - Fatal编程技术网

javascript的事件常量?

javascript的事件常量?,javascript,javascript-events,constants,mouseevent,Javascript,Javascript Events,Constants,Mouseevent,在javascript中,我有如下代码 document.addEventListener("mousedown", mouseDownHandler); 偶尔我也会像这样胖手指 document.addEventListener("mouzedown", mouseDownHandler); javascript不会意识到我是个白痴,我会困惑为什么我的处理程序不能工作 Actionscript3指定如下事件常量 MouseEvent.MOUSE_DOWN // equiv to the S

在javascript中,我有如下代码

document.addEventListener("mousedown", mouseDownHandler);
偶尔我也会像这样胖手指

document.addEventListener("mouzedown", mouseDownHandler);
javascript不会意识到我是个白痴,我会困惑为什么我的处理程序不能工作

Actionscript3
指定如下事件常量

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

如果我胖手指一个
变量
常量
,那么JS会对我生气,我可以很快解决问题。
JavaScript
是否有类似的内容,或者我是否需要为事件类型创建自己的JS伪常量?

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

下面(和中)的精简原始答案:
事件
对象定义了以下常量。使用Firefox 8.0和以下代码:

  • alert(Object.keys(Event).map(function(name){returnname+“\t”+Event[name]})。join('\n'))

    • 是否可以使用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
      

      没有内置功能可以为您执行此操作

      您可以创建自己的事件列表:

      var EventNames = {
        MOUSE_DOWN : "mousedown",
        MOUSE_UP   : "mouseup",
        CLICK      : "click",
        // etc
      };
      
      但这并不能保护您免受打字错误的影响,因为
      EventNames.MOUZE_DOWN
      只会给您
      未定义的
      (这可能会被
      addEventListener()接受,但显然不是您想要的)

      您可以创建一系列单独的全局变量,然后如果您在“常量”名称上键入错误,浏览器将给出一个错误(并且您的IDE或lint产品可能会为您检测到键入错误):

      但当然,“全球都是邪恶的”旅的成员们已经开始因为读了上面的内容而口吐白沫了。您可以在不使用全局变量的情况下,通过将所有代码(包括那些“常量”)包装到一个立即执行的大型匿名函数中来完成上述操作,或者您可以执行如下操作:

      // 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!
      
      当然,关于使用的常见警告也适用,也就是说,在旧浏览器中不受支持,但您可以按照,等等,等等所述对其进行填充


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

      但是,
      Event.mousedown
      作为
      addEventListener()的参数无效
      。在您在
      事件
      对象上查找任何已定义常量的印象下,我发布了此答案。但是,如果要查找包含任何内容(如
      mousedown
      )的常量,答案是:不,没有这样的常量。有关
      事件
      对象的更多信息,请参见哈哈,耶。在静态语言中,会出现编译器错误。在动态语言中,字符串与变量一样安全。(不完全是这样。)我个人从未遇到过这样的事情,通过谷歌几分钟也没有给我提供任何东西。然而,我确实了解到JavaScript有一个
      const
      关键字:@diodeusJavaScript会抱怨一个未定义的变量;因此,如果输入错误,将得到所需的结果。@peterp如果您要求
      MouseEvent。任何Goesher
      JavaScript都不会抱怨;它将以静默方式返回
      未定义的
      ,该名称被接受为有效的事件名称(至少在Chrome上)。只有当这些变量被垃圾邮件作为全局变量时,这才有效。
      mouseDown
      是一个由浏览器或其他容器生成的事件,该容器恰好运行javascript解释器。。。它对javascript来说毫无意义。你可以用任何你想要的名字来发明、激发和处理你自己的事件,所以有一个固定的预定义集合。然后由环境(浏览器)预先定义一些常量字符串供您使用。欢迎使用Stack Overflow Ben。如果您选择您的代码并按下
      {}
      按钮,它将被很好地格式化,或者您可以手动使用四个空格。或者通过用`字符引用来格式化代码
      inline
      。我在“立即执行的匿名函数”中做常量已经有一段时间了,但是我可能喜欢你更好地定义我自己的函数的想法。甚至可能是我自己的“addEventListener”变体,它检查
      未定义的事件类型+我赞成这个想法!当不使用jQuery之类的库时,我总是定义自己的事件绑定函数,而不是直接使用
      addEventListener()
      ,只是为了封装上面显示的跨浏览器if/else。假设您也这样做,那么快速检查事件名称也没什么大不了的。(这不是一个很大的开销,但是如果您想在部署到生产环境之前再次提取该位,那么,这只是一个数组声明和一个if测试。我特意编写了上面的内容来使用字符串数组,因为它比一堆常量要简单得多。)
      // 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!