Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.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_Jquery_Meteor - Fatal编程技术网

Javascript事件';鼠标器';第一次触发两次-流星

Javascript事件';鼠标器';第一次触发两次-流星,javascript,jquery,meteor,Javascript,Jquery,Meteor,在我的Meteor应用程序中,“mouseenter”事件在我第一次将鼠标放在元素上时被触发两次。在第一次正常工作后 此外,当我启动应用程序而不移动鼠标时,事件处理程序只运行一次 代码如下: Template.filters.events({ 'mouseenter .filters-box': (event, element)=>{ var target = Template.instance().$(event.target).children('.filters-popup'

在我的Meteor应用程序中,“mouseenter”事件在我第一次将鼠标放在元素上时被触发两次。在第一次正常工作后

此外,当我启动应用程序而不移动鼠标时,事件处理程序只运行一次

代码如下:

Template.filters.events({
'mouseenter .filters-box': (event, element)=>{
    var target = Template.instance().$(event.target).children('.filters-popup')[0]
    console.log('enter');
    console.log(target);
    if(!target){
        return;
    }

    var prevWidth = target.style.width;
    target.style.width = 'auto';
    var endWidth = getComputedStyle(target).width;
    target.style.width = prevWidth;

    target.offsetHeight;

    target.style.width = endWidth;

},
'mouseleave .filters-box': (event, element)=>{
    var target = Template.instance().$(event.target).children('.filters-popup')[0];
    console.log('leave');
    console.log(target);
    if(!target){
        return;
    }

    target.style.width = getComputedStyle(target).width;
    target.offsetHeight;
    target.style.width = 0;
}
});
这是浏览器控制台中的输出:

Navigated to http://localhost:3000/
filters.js:26 enter
filters.js:27 undefined
然后,当我将鼠标移入和移出元素时:

filters.js:26 enter
filters.js:27 <div class=​"filters-popup" style=​"width:​ 0px;​">​…​</div>​
filters.js:26 enter
filters.js:27 <div class=​"filters-popup" style=​"width:​ 0px;​">​…​</div>​
filters.js:44 leave
filters.js:45 <div class=​"filters-popup" style=​"width:​ 0px;​">​…​</div>​
filters.js:44 leave
filters.js:45 <div class=​"filters-popup" style=​"width:​ 0px;​">​…​</div>​
filters.js:26输入
filters.js:27​…​​
filters.js:26输入
filters.js:27​…​​
过滤器。js:44离开
filters.js:45​…​​
过滤器。js:44离开
filters.js:45​…​​
下次我这样做时,每种类型只触发一个事件:

filters.js:26 enter
filters.js:27 <div class=​"filters-popup" style=​"width:​ 0px;​">​…​</div>​
filters.js:44 leave
filters.js:45 <div class=​"filters-popup" style=​"width:​ 0px;​">​…​</div>​
filters.js:26输入
filters.js:27​…​​
过滤器。js:44离开
filters.js:45​…​​

我尝试了event.preventDefault();和event.stopPropagation();方法,但它仍然不能正常工作。

您的
是否包含任何子元素?它们也可能触发一个鼠标事件。您可以将
event.preventDefault()
放在事件处理程序的开头。这将防止触发任何其他事件处理程序

如果在启动过程中当鼠标在div内时触发该事件,我确实可以想象它会被触发。如果在渲染过程中div的位置/大小发生变化,则即使鼠标位于div结束位置以外的其他位置,也可以获得该div。一个可能的解决方案是只在渲染完成后声明事件处理程序,有点像将东西放入
Meteor.startup
调用中。

您的
是否包含任何子元素?它们也可能触发一个鼠标事件。您可以将
event.preventDefault()
放在事件处理程序的开头。这将防止触发任何其他事件处理程序


如果在启动过程中当鼠标在div内时触发该事件,我确实可以想象它会被触发。如果在渲染过程中div的位置/大小发生变化,则即使鼠标位于div结束位置以外的其他位置,也可以获得该div。一个可能的解决方案是,只在渲染完成后声明事件处理程序,类似于将内容放入
Meteor.startup
调用中。

我尝试使用event.preventDefault();和event.stopPropagation();没有结果…我尝试了event.preventDefault();和event.stopPropagation();没有结果…我也有这个问题与流星。即使.preventDefault()对我也没有任何作用。你有没有找到解决这个问题的办法?我也有关于流星的问题。即使.preventDefault()对我也没有任何作用。你有没有找到解决办法?