jQuery UI对话框越来越多地调用submit回调

时间:2012-07-19 21:55:33

标签: jquery-ui-dialog jquery

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

让我补充一点,点击专用的“提交”按钮可以正常工作,只有在按下密钥时才会失败。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

当它被调用时:

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

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

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

DEMO