Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.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 按键输入不是';没有输入字段时调用t_Javascript_Jquery_Jquery Ui - Fatal编程技术网

Javascript 按键输入不是';没有输入字段时调用t

Javascript 按键输入不是';没有输入字段时调用t,javascript,jquery,jquery-ui,Javascript,Jquery,Jquery Ui,当没有输入字段时,不会调用keydown 我无法捕获转义事件,因为对话框中没有输入字段。 在下面的示例中,它仅在有输入的情况下工作。当我删除输入时,不会达到keydown。 在这种情况下,如何捕捉按下esc或enter键的事件 (函数(){ var dialog=$(“#dialog-confirm2”) .对话({ 可调整大小:false, 身高:150, 莫代尔:是的, closeOnEscape:false,//隐藏x按钮 }) .on('keydown',功能(evt){ if(evt

当没有输入字段时,不会调用keydown

我无法捕获转义事件,因为对话框中没有输入字段。 在下面的示例中,它仅在有输入的情况下工作。当我删除输入时,不会达到keydown。 在这种情况下,如何捕捉按下esc或enter键的事件

(函数(){
var dialog=$(“#dialog-confirm2”)
.对话({
可调整大小:false,
身高:150,
莫代尔:是的,
closeOnEscape:false,//隐藏x按钮
})
.on('keydown',功能(evt){
if(evt.keyCode==$.ui.keyCode.ESCAPE){
警报(“测试”);
dialog.dialog('close');
}
evt.stopPropagation();
});
}());

对话

问题的根本原因是关键事件没有像普通事件那样向容器树上传播。从:

目标。。。聚焦元素处理关键事件,根元素(如果没有合适的聚焦输入元素)

因此,如果没有聚焦输入(不仅仅是显示——如果取消选择输入字段或按钮,示例将失败),那么事件目标将是根元素,或者在本例中为
文档

但是,对于那些偶尔出现对话框的情况,您并不希望将事件处理程序放置在
文档
中,因此您需要做的是在创建对话框时添加事件处理程序,并在关闭对话框时将其删除

下面的例子就是这样做的

//存储对键事件处理程序的引用,以便稍后使用'off'
var-dialogKeyeventHandler;
//返回绑定到对话框实例的匿名事件处理程序
函数makeDialogKeyeventHandler(对话框){
返回函数(evt){
if(evt.keyCode==$.ui.keyCode.ESCAPE){
警报(“测试”);
破坏对话(对话);
}
evt.stopPropagation();
}
}
//创建一个对话框,并将键事件处理程序绑定到“document”以在按下ESC键时关闭该对话框
函数createDialog(){
var dialog=$(“#dialog-confirm2”)
.对话({
可调整大小:false,
身高:150,
莫代尔:是的,
closeOnEscape:false,//隐藏x按钮
});
dialogKeyeventHandler=makeDialogKeyeventHandler(对话框);
$(文档).on('keydown',dialogKeyeventHandler);
}
//关闭对话框并解除键事件处理程序的绑定
函数对话框(对话框){
dialog.dialog('close');
$(document).off('keydown',dialogKeyeventHandler);
dialogKeyeventHandler=null;
}
//打开对话框
createDialog()

对话

我不明白您想要的功能是什么,您能澄清一下您想做什么吗?我正在打开对话框,向用户发送消息(带有“是”和“否”按钮)。按enter键时,将按yes,按esc键时,将按no。将调用该事件,但这会导致问题。然后,escape在该对话框中按no按钮。no应该关闭该对话框(我称您为new destronalog),并单击另一个按钮来调用服务器方法。这不是调用:$find(“”).ajaxRequestWithTarget(“”,”);在这种新的逻辑出现之前,这行代码是有效的。对不起,我不理解你的评论。您可以编辑您的问题以添加其他信息吗?(不要编辑原始问题,否则未来的搜索者将丢失此对话的上下文。)如果不进行编辑,我如何添加?注释对于代码本身来说是不够的。从代码隐藏中,我调用java脚本,该脚本使用yes-no按钮打开jQueryUI对话框消息。如果按“是”,则对话框关闭。如果他按下no,对话框将关闭,并使用以下行在服务器上调用一个方法:$find(“”).ajaxRequestWithTarget(“”,);但是当我插入你的逻辑时,这一行没有被调用。enter应该等于按no,esc应该等于按yes。对不起,我的意思是,“不要更改原始问题,而是编辑以添加新信息。”关于按“是”和“否”:您的对话框没有“是”或“否”按钮,因此我无法直接知道您在说什么。但是,您可以通过多种方式修改上述代码。例如,在调用
destroyDialog
方法时,可以包含一个“state”参数,并根据该状态采取适当的操作。请看一看。