Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在caph列表项上检测长按Enter/OK键_Javascript_Jquery_Tizen_Samsung Smart Tv_Tizen Web App - Fatal编程技术网

Javascript 在caph列表项上检测长按Enter/OK键

Javascript 在caph列表项上检测长按Enter/OK键,javascript,jquery,tizen,samsung-smart-tv,tizen-web-app,Javascript,Jquery,Tizen,Samsung Smart Tv,Tizen Web App,我需要检测caph列表项上长按Enter/OK键的情况。我使用的代码如下: $("#channels-list-container").caphList({ items: MyTVApp.groupChannels, template: "channels-list-item-template", direction: "vertical", }).on("focused", function(event) { MyTVApp.focusedChannelInd

我需要检测caph列表项上长按Enter/OK键的情况。我使用的代码如下:

$("#channels-list-container").caphList({
    items: MyTVApp.groupChannels,
    template: "channels-list-item-template",
    direction: "vertical",

}).on("focused", function(event) {
    MyTVApp.focusedChannelIndex = Number(event.target.dataset.focusableName.split("channel")[1]);

}).on("selected", function(event) {
    var channelIndex = Number(event.target.dataset.focusableName.split("channel")[1]);
    var file = event.target.dataset.file;
    MyTVApp.displayPlayingScreen(file);
});

当焦点在caph列表项上时,如何检测长按Enter/OK键的情况?

因为我还不能发表评论,所以我将在这里给出我的答案。正如此人在评论中所说,你可以在按下按钮或按下键时启动计时器,然后在按下键时停止计时器,看看它被按下的时间有多长,如果时间在你预期的持续时间内或更长,那么你知道按下的时间已经足够长了。检查后,您可以清除计时器

因为我还不能评论,所以我将把我的答案放在这里。正如此人在评论中所说,你可以在按下按钮或按下键时启动计时器,然后在按下键时停止计时器,看看它被按下的时间有多长,如果时间在你预期的持续时间内或更长,那么你知道按下的时间已经足够长了。检查后,您可以清除计时器

正如@basic已经提到的那样,您需要一些机制来检测第一次keydown和keydup事件之间经过的时间

下面的代码应该为您提供一个如何实现这一点的示例。请记住,它只是一个示例,可能需要根据您的特定需求进行调整,但它是为一个独立的通用功能而设计的;它与您的应用程序逻辑没有任何直接连接

如果运行下面的代码示例,请聚焦输入字段并按enter键至少一秒钟,您应该会看到出现一个检测到事件的控制台日志条目

//长按键事件检测
(功能(){
var持续时间=1000,
定时器=空;
$(文档).on('keydown',函数(事件){
//检查计时器是否已在运行。
if(timer!==null)返回;
//启动新计时器。
计时器=window.setInterval(函数(){
//计时器完成时,在当前选定元素上触发longKeyPress事件。
$(event.target).trigger({
键入:“长按键”,
key:event.key,
keyCode:event.keyCode,
which:event.which
});
},持续时间);
});
$(文档).on('keyup',函数(事件){
if(timer==null)返回;
//清除运行计时器。
清除超时(计时器);
定时器=空;
});
})();
//应用逻辑
(功能(){
//绑定到自定义longKeyPress事件。
$(“#频道列表容器”)。在('longKeyPress',函数(事件)上{
如果(event.key==“输入”){
log('在目标元素上检测到长[Enter]键!');
}
});
})();

正如@basic已经提到的,您需要一些机制来检测第一次按键向下和按键向上事件之间经过的时间

下面的代码应该为您提供一个如何实现这一点的示例。请记住,它只是一个示例,可能需要根据您的特定需求进行调整,但它是为一个独立的通用功能而设计的;它与您的应用程序逻辑没有任何直接连接

如果运行下面的代码示例,请聚焦输入字段并按enter键至少一秒钟,您应该会看到出现一个检测到事件的控制台日志条目

//长按键事件检测
(功能(){
var持续时间=1000,
定时器=空;
$(文档).on('keydown',函数(事件){
//检查计时器是否已在运行。
if(timer!==null)返回;
//启动新计时器。
计时器=window.setInterval(函数(){
//计时器完成时,在当前选定元素上触发longKeyPress事件。
$(event.target).trigger({
键入:“长按键”,
key:event.key,
keyCode:event.keyCode,
which:event.which
});
},持续时间);
});
$(文档).on('keyup',函数(事件){
if(timer==null)返回;
//清除运行计时器。
清除超时(计时器);
定时器=空;
});
})();
//应用逻辑
(功能(){
//绑定到自定义longKeyPress事件。
$(“#频道列表容器”)。在('longKeyPress',函数(事件)上{
如果(event.key==“输入”){
log('在目标元素上检测到长[Enter]键!');
}
});
})();


您可以将计时器设置为onKeyDown(想想它的tvKey.KEY\u ENTER),然后在KEY up上检查计时器运行的时间。在检查持续时间后,在向上键上执行进程。您可以将计时器设置为onKeyDown(想想它的tvKey.key\u ENTER),然后在向上键上检查计时器运行的时间。在检查持续时间后,在向上键时执行流程。