我正在创建一个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">
答案 0 :(得分:0)
您在同一元素上有两个touchstart
个事件。因此,它同时执行interact
和highlight
。这是故意的吗?另外,您没有将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>
希望这有助于某人