jquery多个事件响应

时间:2015-03-24 17:26:17

标签: javascript jquery events

我是一名经验丰富的程序员,但在Javacsript / JQuery方面没有多少经验。我试图修复别人的代码,所以我有点不在我的舒适区。另外,我们正在使用两者的古老版本。

我们有一个从链接弹出的对话框。它有一个文本字段和一个OK按钮。您输入电子邮件地址并将信息发送给您。单击确定后,一切都按预期工作。在地址后键入enter时,您将获得n个副本,n是对话框打开的次数。

  $(index_init);

  function index_init()
    {
    $("#forward_one_dialog").dialog(
      {
      autoOpen: false,
      modal: false,
      zIndex: 3000,
      buttons: { "Ok": forward_one}
      });
    $(".link_forward").click(function()
      {
      if ($("#forward_one_dialog").dialog("isOpen") == true)
      {
        return false;
      } else {
      $("#forward_one_dialog").dialog("open");
      $("#forward_one_dialog").keypress(function(e) {
        if(e.keyCode == $.ui.keyCode.ENTER) {
          forward_one();
        }
      });
      $("#forward_one_to").focus();
      }
    });
    }

  function forward_one()
    {
    var dialog = "#forward_one_dialog";
    var path = $("#forward_one_url").attr('value');
    var url = "/emails/list/" + path + "/forward/?fmt=json";
    var recipients = $("#forward_one_to").val();
    if (!recipients)
      {
      $(dialog).dialog("close");
      // this is in list.js:
      error_txt("#no_forward");
      return false;
      }
    var emailid = $("#forward_one_emailid").attr('value');
    var data = { "subset" : [emailid], "recipients" : recipients };
    $.post(
      url,
      data,
      function(jsonrpc, xhrstatus) {
        jsonrpc_status(jsonrpc, xhrstatus, "#forward_one_dialog");
      },
      "json"
     );
    $(dialog).dialog("close");
    return false;
  }

如您所见,单击“确定”并在输入时调用forward_one。这只是次数。

如果有任何帮助,我尝试重置forward_one中文本字段的值。在这种情况下,对话框不包含最后一个值。我仍然有多个电话,但只有一个有新值。其余的都有重置值。

1 个答案:

答案 0 :(得分:0)

$(".link_forward").click(function()
{
  /* ... */
  $("#forward_one_dialog").keypress(function(e) {
    if(e.keyCode == $.ui.keyCode.ENTER) {
      forward_one();
    }
  });
  /* ... */
});

您可以在此处看到,每次点击.link_forward时,都会调用keypress。对keypress 的调用会向#forward_one_dialog元素添加处理程序。因此,每次单击它时,都会在现有顶部添加另一个处理程序。这是您的问题的原因。将此调用移至点击处理程序之外的keypress,以便仅应用一次。如果只有在打开对话框后才能调用它,那么创建一个布尔值来跟踪它是否已经被调用并确保它只被调用一次。