我正在构建一个页面,我想在其中使用Taphold启动contextMenu。但是,当元素位于父级内部时,分路点会传播到该父级。我想防止这种情况。
因此,当用户抱住孩子时,仅应启动孩子Taphold函数,而当用户抱住父母时,仅应启动父母。
我尝试了el.stopPropagation()和el.stopImmediatePropagation(),但是两者都没有阻止Taphold向父级传播。
This fiddle将显示问题。抱着绿色的孩子也会触发红色的父母的触摸
小提琴显示两个div:
<div class='parent'>
<div class='child'></div>
</div>
并使用以下代码:
$('.parent').on('taphold', function( el ){
alert( 'parent' );
});
$('.child').on('taphold', function( el ){
alert( 'child' );
});
如果按住绿色div,则红色也会触发,这不是我想要的。
答案 0 :(得分:1)
嗯,taphold
并不像其他事件那么容易,因为要认识到这一点,有必要启动timer
来检查经过时间。初始屏幕压力(JQM使用其自己的vmousedown
事件)。因此,在经过tapholdThreshold
之后(通常为750毫秒),框架可以引发taphold
事件。
我相信可以获得完美解决方案您可能需要修补JQM,否则这里是一个快速解决方法:
$('.parent').on('taphold', function( e ) {
if(e.target == e.currentTarget) {
// do the action
}
});
taphold
仍将被引发,但是您可以捕获源代码并跳过代码的执行。