Javascript Touchstart事件不适用于原来隐藏的按钮

Javascript Touchstart事件不适用于原来隐藏的按钮,javascript,android,touchstart,Javascript,Android,Touchstart,我正在创建一个Android应用程序,有两个按钮。一开始一停止。单击“开始”按钮后,“停止”按钮可见,然后“停止”按钮变为可见,“开始”按钮变为不可见 我正在尝试在停止按钮上获得一个touchstart事件(也可以添加到开始按钮,但不是必要的)。然而,由于某些原因,我下面的代码不能正常工作。请告诉我我错过了什么 背景: -使用jquery隐藏我的按钮 -带有背景图像的按钮 JAVASCRIPT: var b=document.getElementById('STOP'),start=0; //

我正在创建一个Android应用程序,有两个按钮。一开始一停止。单击“开始”按钮后,“停止”按钮可见,然后“停止”按钮变为可见,“开始”按钮变为不可见

我正在尝试在停止按钮上获得一个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按钮:

<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">

在相同的元素上有两个
touchstart
事件。因此,它同时执行
交互
突出显示
。这是故意的吗?另外,您没有将
事件
传递到
突出显示(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;
}

我已经解决了我的问题,我试图在这方面变得太聪明了。我只需要onload函数中的两行代码:

    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>

//HTML内容

希望这对某人有所帮助

不,我无意在同一事件中两次呼叫touchstart。我对这一切都很陌生,对编码有点迷茫。我只想检测touchstart,就像我要检测一个点击事件并运行一个javascript函数一样。如上面的示例所示,它可以是一个简单的javascript警报。这是否意味着我上面的代码有很多不相关的代码?你能帮我把这个钉住吗。如果我有两个单独的按钮,两个按钮同时可见,我完全理解。JavaScript是一个变化无常的野兽。让我们特别关注您的
forEach
循环。您只在一个元素上运行此循环,因此,我建议将“开始”和“停止”按钮添加到数组中,循环该数组,并向每个数组添加事件侦听器。让我更新我的答案。刚刚实现了上面的代码,但是这似乎从来没有通过事件函数(alert(“test”);)。此外,我还遇到了一个错误,必须在false);}之后添加a)我忘了一个
forEach
语句末尾的code>。又是一个输入错误(也许我应该把它扔进JSFIDLE)。addEventListener应为addEventListener。