Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.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
使用jquery/javascript执行以下操作的最佳实践是什么?_Javascript_Jquery - Fatal编程技术网

使用jquery/javascript执行以下操作的最佳实践是什么?

使用jquery/javascript执行以下操作的最佳实践是什么?,javascript,jquery,Javascript,Jquery,所以我只是想给hover添加一些函数。下面的代码做了同样的事情,除了带有for循环的代码外,我将目标存储在一个数组中。实际上我有几个问题 这是stopPropagation的正确用法吗 这样做的最佳实践是什么 以下哪种方法更快,使用的资源更少 我知道我可以使用hover()但我使用bind是因为我认为它更快,我的想法正确吗 多谢各位 for (var i in slides) { $(slides[i].el).bind( { mouseenter

所以我只是想给hover添加一些函数。下面的代码做了同样的事情,除了带有for循环的代码外,我将目标存储在一个数组中。实际上我有几个问题

  • 这是stopPropagation的正确用法吗
  • 这样做的最佳实践是什么
  • 以下哪种方法更快,使用的资源更少
  • 我知道我可以使用hover()但我使用bind是因为我认为它更快,我的想法正确吗
  • 多谢各位

        for (var i in slides) {
            $(slides[i].el).bind( {
                mouseenter: function (event) {
                    event.stopPropagation();
                    // do something
                },
                mouseleave: function (event) {
                    event.stopPropagation();
                    //do something
                }
            });
        }
    
        $("#vehicleSlides .vehicleAreas").bind( {
            mouseenter: function (event) {
                event.stopPropagation();
                // do something
            },
            mouseleave: function (event) {
                event.stopPropagation();
                //do something
            }
        });
    
    1-这是stopPropagation的正确用法吗

    如果您希望停止DOM树中冒泡的事件,则选择“是”

    2-这样做的最佳实践是什么

    就我个人而言,我更喜欢jQuery选择器后跟方法,但这只是一个首选项。最佳实践是您和您的团队一致同意并一致使用的任何风格

    3-以下哪种方法速度更快,使用的资源更少

    实际上,两者之间几乎没有区别

    4-我知道我可以使用hover(),但我使用bind是因为我认为它更快,我的想法正确吗


    jQuery hover方法是绑定到mouseenter和mouseleave事件的简写,因此使用hover将有一个额外的函数调用,但是性能几乎没有差别。

    最佳实践将使一致正确的功能成为最高优先级,因此,这取决于父节点处理后是否应该看到或听到事件

    这取决于你的设计。例如,在希望能够拖动的类似“窗口”的对象中,可以a.将鼠标处理程序附加到整个窗口,或B.将侦听器附加到子“背景”对象以检测鼠标按下事件以开始拖动

    如果选择design B,则必须确保不希望接收鼠标事件的标签和其他对象已禁用鼠标事件(在Flash[AS3]中,将mouseEnabled和mouseChildren设置为false;不确定JavaScript)。这种设计的一个缺点是它会阻止U.I.中的任何对象在冒泡阶段被动地处理或修改事件行为,因为捕获阶段的任何拦截都会首先阻止它到达背景。这种设计的一个优点是,通过允许事件冒泡,可以让监视器和其他全局效果在更高级别上处理鼠标点击

    另一方面,如果选择design A,则不必担心使子对象对鼠标透明(标签上的事件仍会冒泡到窗口容器本身),但是,您必须确保在处理事件后停止子对象(如按钮)上的事件传播,以便它们不会到达层次结构顶部的窗口处理程序。这实际上取决于您希望它如何工作,混合方法可能是最好的

    你可以把它归结为一门设计科学,以至于“设计”根本不是一个设计,而是一个复杂的事实,在科学上是正确的


    此系统的任何浏览器优化都需要在捕获阶段跟踪父节点为事件类型附加了bubble阶段事件处理程序的情况。例如,如果它进入目标/冒泡阶段时知道没有父节点具有处理程序,那么它可以跳过整个冒泡阶段,或者直接跳到已知具有处理程序的节点。但是,依我看,这是一个糟糕的设计,因为您可能希望在捕获或冒泡期间随时将新处理程序附加到父节点,或者您可能希望将节点移动到另一个父节点,以尝试使事件冒泡到另一个父链。尝试一下,看看它在不同浏览器中的表现。与涉及HTML呈现和事件处理的其他内容一样,在行为和性能方面必然存在巨大的不一致性:P

    绑定和悬停之间可能没有太大区别。避免工作总是一件很好的事情,但是对一个事件处理程序的1-3个函数调用不会对现代JIT的性能造成影响。

    您没有错误地调用StopperPagation,但如果您这样做不是因为起泡让您感到不舒服,或者因为您害怕意外触发其他东西,那么是的,您这样做是错误的

    UI工作的第一条规则应该始终是:

    不要做任何你不需要做的事情

    示例:

    • 不要解决你还没有解决的问题
    • 不要做任何“以防万一”的事情,因为这意味着您不知道实际发生了什么,在调用UI中的任何事情之前,您确实需要了解您的东西实际做了什么以及它是如何工作的
    • 不要阻止人们以不同于预期的方式使用您的UI。e、 验证HTML格式,当有人试图让你写的东西工作起来有点不同时抛出错误。你在做什么,经营客户支持热线?它对任何人都没有帮助。如果他们更喜欢语义正确的无序列表而不是一堆div,那又有什么关系呢
    但是特别是在stopProp上,如果您必须使用它(它可以非常优雅地解决一些问题,所以千万不要说“永不”),请尝试使用它只命中端点节点,以便可以将其他内容添加到同一容器中,而不会失去冒泡的好处。是的,我说。不要害怕冒泡。如果您的HTML是一场彻底的灾难,那么向上移动到祖先行的事件只可能触发其他UI事件(它应该是一直返回到主体的容器,对吗?)

    另外,如果您可以在采取操作之前验证处理程序中是否有正确的目标元素,请执行该操作,而不是stopProp。但是天哪,当人们加上