点击和按键组合

时间:2017-03-07 00:08:04

标签: javascript jquery html css keyboard

嘿伙计们,我正在努力为我的功能组合点击和按键,但到目前为止我没有尝试过的任何东西似乎都有效。 这是我的代码:

function victoryMessage() {

    $(document).off("keyup", handleKeyUp);
    $('#feedback').append("Bravo!<br><br><div id='replay' class='button'>Nastavi</div>");


    $('#replay').on("click",function () {
        if(questionBank.length>3) {
            gameScreen();
        }
        else {
            finalPage();
        }
    });

    $(document).off("tap", keepFocus).trigger("tap");
}

到目前为止,我已尝试过以下内容:

$("#replay").on("click keyup", function (e) {
    if (e.type == "click" || e.keyCode == 13) {
        if(questionBank.length>0) {
            gameScreen();
        }
        else {
            finalPage();
        }
    }
});

var callback = function() {
    if(questionBank.length>0) {
        gameScreen();
    }
    else {
        finalPage();
    }   
};

$("#replay").keypress(function() {
    if (event.which == 13) callback();
});

$('#replay').click(callback);

$(document).on("keypress", function(e){
    if (e.which == 13) {
        testKey();
    }
});

我也尝试过其他一些东西,但似乎没有任何效果。在这里链接,以便您查看我的完整代码http://www.wpacademy.nextweb.space/TestingMobile/
编辑:澄清当Andy说我希望点击时只需点击重播按钮就可以注册,输入键可以在文档中的任何位置按下时进行注册。

3 个答案:

答案 0 :(得分:3)

从我的测试中你不能直接按下按钮,所以可能的解决方案如下

当用户在屏幕上的任意位置按Enter键时,请使用您的函数调用替换alert。

$(document).keypress(function(e) {
    if(e.which == 13) {
        alert('You pressed enter!');
    }
});

$("#replay").on("click", function(){
  function call
});

另外,为了避免代码一直在按键事件中运行,您可以检查屏幕上是否存在特定元素,如重播按钮。

希望有所帮助

答案 1 :(得分:3)

我认为这就是你所追求的。您希望单击仅在单击重播按钮时进行注册,并在按下文档中的任何位置时按Enter键进行注册。

&#13;
&#13;
$(document).on("click keypress", function (e) {      
  if (e.type === "click" && e.target && e.target.id === "replay") {
    e.preventDefault();  
    $("#output span").html("click happened");
  } else if (e.type === "keypress" && e.keyCode === 13) {   
    e.preventDefault();  
    $("#output span").html("enter key anywhere within document happened");
  }
});
&#13;
#output {
  margin-top: 1em;
  padding: 0.5em 0.5em 0;
  border: 2px dashed gray;
  width: 300px;
  display: block;
  height: 50px;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="replay">replay button</button>
<div id="output">Event type: <span></span></div>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

由于元素是通过JS创建的,因此将点击处理程序分配给document并将其推迟到#replay。而且我不确定您打算如何在keyup上抓取div,但如果您在contenteditable上设置div,则可以双击文字,然后键入它以显示正在捕获的两个事件。这是一个codepen http://codepen.io/anon/pen/RpGEWK

$('#feedback').append("Bravo!<br><br><div id='replay' class='button' contenteditable>Nastavi</div>");
$(document).on("click keyup", "#replay", function(e) {
  console.log(e);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="feedback"></div>