在计时器上使用preventDefault()

时间:2014-08-14 01:47:34

标签: javascript jquery

有没有人知道是否有防止默认()的方法,但是在计时器上,所以默认操作会在一定时间后恢复吗?

这是我到目前为止所拥有的:

function setResetInterval(bool){
  var el = $('article');
  if(bool){
        timer = setInterval(function(){
      setTimeout(function(){
        console.log('default prevented');
          e.preventDefault();
      }, 500);
    },1000);
  }else{
    clearInterval(timer); 
  }
}

if(object.touch.touch){
    object.header.menu_button.attr('href',null);
    object.touch.articles = $('article');
    object.content_blocks.on('click','article',{},function(e){
    object.touch.articles.removeClass('on');
    $(this).addClass('on');
    e.stopPropagation();
    setResetInterval(true);
         setTimeout(
                function() { setResetInterval(false); }, 500);
    });
}

问题是,在点击后调用该函数并且不会阻止操作。另一种方法是阻止点击默认操作,停止在移动设备上滚动。

更清楚地考虑它,真正的问题是所讨论的点击标签基本上是移动设备上的整个屏幕宽度。

1 个答案:

答案 0 :(得分:1)

以Cayce所说的为基础,解决这个问题的一种方法是将功能与后来删除的类联系起来。

<强> Demo Fiddle:

在示例中,只要div具有.red类,就会阻止默认值,setTimeout将在3秒后删除该类。

JS:

$('body').on('click', '.red', function (e) {
    e.preventDefault();
    console.log('I only show up while default is prevented');
});

$('body').on('click', 'div', function () {
    console.log('I will always show up');
});

setTimeout(function () {
    $('div').removeClass('red');
},3000);