2017-03-07 81 views
0

嘿家伙我试图使我的功能结合点击和按键,但我迄今试过的东西似乎工作。 这是我的代码:单击和按键组合

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/
编辑链接:要澄清安迪说我要点击到点击只重放按钮时注册,和进入键在文档中的任何地方按下时进行注册。

回答

2

从我的测试,你不能直接击的按钮,一个可能的解决方案是以下

当用户按下屏幕上的任何地方进入,以替换警告你函数调用。

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

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

另外要避免在按键事件中运行代码的时候,你可以检查一个特定的元素存在像重放按钮在屏幕上。

希望可以帮到

+0

谢谢你,这是我想要的。同样对于你的答案的第二部分,我应该使用类似的东西来实现它> if($('#MyId')。length){ //我的代码 } – Zvezdas1989

+0

@ Zvezdas1989是的东西就像你提供的代码,检查一个元素是否有一个类或者对页面是否可见。 –

1

由于元素通过JS创建,分配单击处理程序document并推迟到#replay。而且我不知道你是如何计划在div捕捉keyup,但如果你在div设置contenteditable,您可以双击该文本,然后在其中键入显示这两个事件都被捕获。这里有一个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>

+0

你是说在这里,所有点击的文件会去#replay按钮,但我不知道那将是有意义在这种情况下。 –

+0

@PetrosKyriakou我很感谢您的评论。我建议阅读https://api.jquery.com/on/ *的底部。注意.on()允许在任何段落上的点击事件 - 甚至是新的事件 - 因为事件是由不断变化的事件处理的, ('click','p',function(){});''但'document'而不是'body'是当前的body元素。同样常见。 –

+0

@PetrosKyriakou *“所有点击文档将进入#replay按钮”*为false。只有在文档中点击'#replay'才能通过这个事件处理程序。您应该阅读API - 这是新的/呈现元素的标准jQuery。 –

2

我想这就是你想要的。只需点击重播按钮即可点击注册,并且在文档内的任何位置按下时按Enter键即可注册。

$(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"); 
 
    } 
 
});
#output { 
 
    margin-top: 1em; 
 
    padding: 0.5em 0.5em 0; 
 
    border: 2px dashed gray; 
 
    width: 300px; 
 
    display: block; 
 
    height: 50px; 
 
}
<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>

+0

你的代码也能很好地工作,我感谢你,但作为一个开始学习JS相对最新的人,Petros代码更容易理解,所以我选择了他的解决方案。我当然赞成你:) – Zvezdas1989