2015-06-11 32 views
0

我为特殊的平板电脑开发了一个Web GUI。这款平板电脑使用Linux运行,使用的浏览器是Chromium。该应用程序是一个带有PHP,HTML5,JQuery和JavaScript的Web应用程序。现在我遇到了一个问题。屏幕是一个触摸屏,用户可以通过触摸屏幕来浏览应用程序。但是现在我们决定添加一个节电功能。此功能将在三分钟后关闭背景灯。要再次打开背光,用户应该再次触摸屏幕。这导致了这个问题,因为在任何触摸时,即使背景灯关闭,按钮也被按下。如果设置了cookie,我想通过放弃触摸屏上的所有点击来防止这种情况发生。如果这个cookie没有设置,触摸屏和应用程序应该按照需要工作。我怎么解决这个问题?捕获所有点击事件并放弃不允许

我安装了一个事件监听器来注册所有的点击并重置时间。

window.addEventListener('mousedown', function(e){ 
    $.get('php/timeupdate.php', function(){}); 
}, false); 

代码用于停止执行:

$(document).on('click', function(event) { 
    $.get('php/getwakeup.php', function(e){ 
     if(e==='true'){ 
      //event.preventDefault(); // I tried all three possibilities 
      //event.stopImmediatePropagation(); 
      event.stopPropagation(); 
     } 
    }); 
}); 

回答

1

你可以试试这个:

$(document).on('click', function(event) { 
    // get your cookie 
    if(cookie is set) { 
     event.stopPropagation(); 
    } 
}); 

event.stopPropagation();拦截各种事件,从那里你把它叫做=处理)

编辑:

你必须设置你的$不用彷徨电话同步或做完全不同势。看看jQuery.Ajax documenation。有一个称为“异步”的参数。

但是要小心,除非电话准备就绪,否则您的网页上将不会执行其他任何操作!所以如果你的脚本没有回答,其他的东西都不会在你的网站上运行。

更好的解决方案是设置ja循环调用,以获得您需要的信息。将其设置为每两秒(setInterval是您的朋友)。如果你的回应是真的,那么你可以在你的onDocumentClick事件中设置一个全局变量。

window.isBacklightOff = false; 
setInterval(function() { 
    $.get('php/timeupdate.php', function(e) { window.isBacklightOff = !!e; }) 
}, 2000); 

$(document).on('click', function(event) { 
    // get your cookie 
    if(window.isBacklightOff === true) { 
     event.stopPropagation(); 
    } 
}); 
+0

我试过了,但不起作用。 event.PreventDefault()和event.stopImmediatePropagation()都不起作用。 –

+0

请张贴您尝试执行event.stopPropagation() –

+0

的片段,我将您的代码片段添加到了我的页面。我改变的唯一的事情是我使用一个php脚本来获得状态。但调试显示,在执行点击操作之前执行了javascript。 –

0

当背光灯熄灭时,您可以设置一些标志handleEvents = false; 所以当标志打开时不要处理任何事件。 现在,当背光亮起时,您可以设置handleEvents = true。

$(document).on('click', function(event) { 
    // get your flag say handleEvents 
    if(!handleEvents) { 
     event.stopImmediatePropagation(); 
     return; 
    } else { 
     //do your biz logic send ajax..etc 
    } 

}); 

之所以上面的代码是不工作:

$(document).on('click', function(event) { 
    $.get('php/getwakeup.php', function(e){ 
     if(e==='true'){ 
      //event.preventDefault(); // I tried all three possibilities 
      //event.stopImmediatePropagation(); 
      event.stopPropagation(); 
     } 
    }); 
    }); 

函数内部$不用彷徨是异步,并呼吁在这一成功要设置的情况下,停止传播..当成功函数被调用的时候,事件已经完成并且已经调用了所有的监听器。 所以总之你一定不要做这个事件在成功函数里面停止传播。

+0

PHP脚本正在管理背景灯。所以我只能使用PHP来设置一个变量。不幸的是PHP不能设置JS变量。 –