2016-03-27 30 views
0

我有一个包含表单的jQuery UI模式框。按键不被称为已经隐藏jQuery UI模式框后隐藏

我声明了keypress事件来处理Enter被按下。 如果我隐藏模态框中包含的表单,则不会再调用按键​​事件。

这种行为在这里重现:https://jsfiddle.net/patrick29/jqp4wp77/

$('.dialog').on('keypress', function(e) { 
    if (e.keyCode == $.ui.keyCode.ENTER) { 
     submit(); 
    } 
}); 
function submit() { 
    alert('ok'); 
    $('.dialog form').hide(); 
} 

第一次按下回车键我收到OK消息。然后窗体被隐藏,第二次按下Enter键我不再收到ok消息。

你知道我为什么以及如何隐藏表单并仍然有按键事件的工作吗?

谢谢!

+0

如果它是隐藏的,怎么能有重点,以便您可以按里面的钥匙? –

+0

确定按钮是没有隐藏的模式框之一,所以我预计隐藏窗体不会改变模式框上的按键事件管理 – user2708647

回答

0

你可以做这样的事情而不是.hide();

$('.dialog form').css({ 
    opacity: 0 
}); 

https://jsfiddle.net/nr5fptd2/1/

+0

它的工作原理,但我希望空间占用的形式消失,而不是设置不透明度为0的情况下 – user2708647

+0

function submit(){警报( 'OK'); ('。dialog')。css({0,0,0,0,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, } –

+0

由于我没有找到任何干净的解决方案,我使用了一个灵感来自你的函数的解决方法submit(){alert('ok'); $( '对话'),CSS({ '位置': '绝对', '左': ' - 500像素'}); }'谢谢 – user2708647

0

要在容器上有一个按键处理程序,您需要在一个支持键盘交互的元素(如输入)中有内容。一旦你隐藏表单,.dialog div里面没有任何元素支持。更多的信息在这里:http://www.456bereastreet.com/archive/201302/making_elements_keyboard_focusable_and_clickable/

在你的提交函数中添加$('.dialog').append('<input/>');,例如,将使事件工作。当然,我不推荐它。

+0

我试着添加$('。dialog')。append('') ;在我的提交功能,但结果是相同的(按键事件不处理后,表格被删除) – user2708647