我从JQuery UI网站上获取了JQuery UI对话框表单示例。
由于我想要,一旦打开对话框并显示表单,按下该键提交表单,我在onReady()中添加了以下内容:
$ .extend($。ui.dialog.prototype.options,{。 open:function(){ var $ this = $(this);
// focus first button and bind enter to it
$this.parent().find('.ui-dialog-buttonpane button:first').focus();
$this.keypress(function(e) {
if( e.keyCode == 13 ) {
$this.parent().find('.ui-dialog-buttonpane button:first').click();
return false;
}
});
}
});
这完全成功(我的意思是click()必须时触发),但会发生以下情况:
当首次通过按键提交表单时,提交将执行一次。
如果我重新打开对话框并按下该键再次提交,则表格会提交两次。
如果我重新打开对话框并按下按键再次提交,表单会提交三次,依此类推......
可以使用以下小提琴进行测试: http://jsfiddle.net/fWW2E/
让我补充一点,点击专用的“提交”按钮可以正常工作,只有在按下密钥时才会失败。
有什么想法吗?
谢谢!
答案 0 :(得分:0)
因为您在“打开”时分配了这个,并且您的按钮正在“关闭”对话框。
当它被调用时:
$('something').dialog('close');
实际上并没有删除元素,它只是隐藏它。因此,当您下次单击打开“新”对话框时,您实际上只是再次显示第一个对话框。然而,“open”事件每次打开时都会再次被触发,这会在其上添加一个新的按键处理程序。
这是小提琴。我实际上向控制台写了一个关于该元素的当前处理程序的数组。每次打开对话框时都会看到有另一个按键处理程序。