0

我从 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/

让我补充一点,通过单击专用的“提交”按钮可以正常工作,只有在涉及按键时才会失败。

有任何想法吗 ?

谢谢 !

4

1 回答 1

0

因为因为您在“打开”时分配它并且您的按钮正在“关闭”对话框。

当它被调用时:

$('something').dialog('close');

实际上并没有删除元素,它只是隐藏它。因此,下次您单击打开“新”对话框时,您实际上只是再次显示第一个对话框。然而,每次打开时都会再次触发“open”事件,这会在其上添加一个新的按键处理程序。

这是小提琴。我实际上在控制台上写出了该元素上的当前处理程序数组。每次打开对话框时,您都会看到有另一个按键处理程序。

演示

于 2012-07-19T22:14:25.137 回答