suchen

Heim  >  Fragen und Antworten  >  Hauptteil

javascript – Fehler beim Umschalten zwischen Mausereignissen und Tastaturereignissen bei Verwendung von Schaltflächen-Tags?

Ich habe eine kleine Lotterie-Sache gemacht. Die Start- und Stopp-Buttons sind Button-Beschriftungen. Wenn ich mit der Maus „Start“ drücke und die Anzahl der Personen eingebe, ist es in Ordnung, die Eingabetaste zu drücken, um zu pausieren, aber wenn ich die Eingabetaste erneut drücke, wird der Vorgang gestartet und dann sofort gestoppt, anstatt die Eingabetaste erneut zu drücken, um zu beenden. Es wird „Ja“ lauten, oder es stoppt möglicherweise nicht sofort, wenn ich zuerst auf die Seite klicke und dann die Eingabetaste drücke. Ich möchte wissen, warum?

Code:
<!DOCTYPE html>
<html lang="en">
<head>

<meta charset="UTF-8">
<title>抽奖</title>
<style type="text/css">
*{
    margin:0 0;
    padding:0;
    font-family: "微软雅黑";
}
h1{margin-top:20px;text-align: center;}
#content{
    margin: 0 auto;
    text-align: center;
}
#show{
    margin: 10px auto;
    padding: 20px;
    text-align: center;
    font-size: 300px;
}
.btn{
        margin-top: 10px;
}

.btn li{
    display: inline-block;
    width:220px;
}
.btn button{
    border: 2px outset #fff;
    background: #000;
    letter-spacing: 2px;
    padding: 5px 8px;
    color: #FFF;
    font-size: 18px;
    font-weight: bold;
    border-radius:5px; 
    outline:none;
    cursor: pointer;
    width: 150px;
    text-align: center;
}
#footer{
    margin-top: 65px;
}
</style>
<script type="text/javascript">
var timer=null;
var num=0;
var flag=0;
window.onload=function(){
    start=document.getElementById("start");
    stop=document.getElementById("stop");
    showNum=document.getElementById("show");
    start.onclick = playFun;
    stop.onclick = stopFun;

    document.onkeyup=function(event){
        var event = event || window.event;
        if(event.keyCode==13){
            if(!flag){
                playFun();
            } 
            else {
                stopFun();
                console.log(flag);
            }
                    
        }
    }
}
function playFun (){
    if(!num){
    num = window.prompt("参加这次抽奖的人数:");
    if(!num){
        playFun();
        }
    }
    clearInterval(timer);
    timer = setInterval(function(){
        var random = Math.floor(Math.random()*num+1);
        showNum.innerHTML=random;
        },50);
        showNum.style.background = '#FFF';
        showNum.style.color = '#000';
        flag=1;
    }
    function stopFun (){
        clearInterval(timer);
        showNum.style.background = '#000';
        showNum.style.color = '#FFF';
        flag=0;
        }
</script>

</head>
<body>

<h1>抽奖XD</h1>
<p id="content">
    <p id="show">1</p>
    <ul class="btn">
        <li><button id="start">开始</button></li>
        <li><button id="stop">停止</button></li>
    </p>
</p>

</body>
</html>

習慣沉默習慣沉默2749 Tage vor581

Antworte allen(3)Ich werde antworten

  • 天蓬老师

    天蓬老师2017-05-18 10:56:36

    点击一次button之后,焦点就定位到了button上,此时每次按回车,button都就会被点击两次。换成span就不会出现焦点的问题

    Antwort
    0
  • 怪我咯

    怪我咯2017-05-18 10:56:36

    原理如楼上所说,补充下答案。

    function playFun (e){
        e && e.target.blur()
        if(!num){
        num = window.prompt("参加这次抽奖的人数:");
        if(!num){
            playFun();
            }
        }
        clearInterval(timer);
        timer = setInterval(function(){
            var random = Math.floor(Math.random()*num+1);
            showNum.innerHTML=random;
        },50);
        showNum.style.background = '#FFF';
        showNum.style.color = '#000';
        flag=1;
    }
    function stopFun (e){
        e && e.target.blur()
        clearInterval(timer);
        showNum.style.background = '#000';
        showNum.style.color = '#FFF';
        flag=0;
    }

    Antwort
    0
  • PHP中文网

    PHP中文网2017-05-18 10:56:36

    焦点在按钮上的时候, 按下enter就相当于一次鼠标左键点击.
    还有, button标签是不被建议使用的, 所以直接替换掉不用犹豫

    Antwort
    0
  • StornierenAntwort