Touchstart事件未处理最初隐藏的按钮

时间:2012-02-21 15:57:36

标签: javascript android touchstart

我正在创建一个Android应用,并有2个按钮。 1开始,1站。单击开始按钮后,可以看到停止按钮,然后停止按钮变为可见并开始不可见。

我试图在STOP按钮上获得一个touchstart事件(也可以添加到开始按钮但不是必需的)。但是,出于某种原因,我的下面的代码无法正常工作。有些人可以让我知道我错过了什么。

背景: - 使用jquery隐藏我的按钮 - 带背景图片的按钮

JAVASCRIPT:

var b=document.getElementById('STOP'),start=0;

//Check for touchstart
if('ontouchstart' in document.documentElement) 
{
    document.getElementById("notouchstart").style.display = "none";
}

//Add a listener that fires at the beginning of each interaction
[b].forEach(function(el){el.addEventListener('touchstart',interact);});

//Add the event handlers for each button
b.addEventListener('touchstart',highlight);

//Functions Store the time when the user initiated an action
function interact(e) 
{
    start = new Date();
}

//Highlight what the user selected and calculate how long it took the action to occur
function highlight(e) 
{
    e.preventDefault();
    e.currentTarget.className="active";
    if(start)
    {
        alert("test")
    }
    start = null;
}

HTML BUTTON:

<INPUT TYPE="button" style="background:url(images/Start_Btn.png); background-color:transparent; width:150px; height:186px; border:none; cursor:pointer;" id="START" onClick="startBTN();">
<INPUT TYPE="button" style="background:url(images/Stop_Btn.png); background-color:transparent; width:150px; height:186px; border:none; cursor:pointer;" id="STOP">

2 个答案:

答案 0 :(得分:0)

您在同一元素上有两个touchstart个事件。因此,它同时执行interacthighlight。这是故意的吗?另外,您没有将event传递到highlight(e)函数中。你需要将它包装在一个传递它的匿名函数中:

b.addEventListener('touchstart',function(e) { highlight(e); }, false);

此外,请不要忘记在false声明中添加addEventListener

编辑:我们不希望将touchstart的两个事件侦听器放到同一个元素中。我们需要修改forEach语句以及highlight函数。

var b = document.getElementById('STOP');
var c = document.getElementById('START');
var array = [b, c];

array.forEach(function(element, index, array) {
  element.addEventListener('touchstart', function(event){ highlight(event); }, false);
});

function highLight(event) {
  start = new Date(); // not sure what you're trying to accomplish here
  event.preventDefault();
  event.currentTarget.setAttribute('class', 'active');
  if(start) {
    alert("test")
  }
  start = null;
}

答案 1 :(得分:0)

我已经解决了我的问题,我试图变得过于聪明。我只需要在onload函数中使用2行代码:

    function onload()
    {
    /* PART 1 - sets touch even to button
       PART 2 - Defines what JavaScript function to run
       PART 3 - Indicates to set the touch event to false on first load */
        document.getElementById('START').addEventListener('touchstart', startBTN, false);
        document.getElementById('STOP').addEventListener('touchstart', stop, false);
    }

调用函数onload:

<body  onload="onload();">
     //HTML CONTENT
</body>

希望这有助于某人