-1

我有两段非常相似的代码,一段有效,另一段无效:这个有效:

$(document).ready(function() {
  return $("form#myform").live("submit", function() {
    var valuesToSubmit;
    valuesToSubmit = $(this).serialize();
    $.ajax({
      url: $(this).attr("action"),
      data: valuesToSubmit,
      dataType: "JSON",
      success: function(json) {
        return $("#form-container").html(json["text"]);
      },
      error: function(json, xy, mycode) {
        var msg, response;
        response = $.parseJSON(json.responseText);
        msg = response.text;
        return alert(msg);
      }
    });
    return false;
  });
});

而这不是:

$(document).ready(function() {
  return $("form#myform").submit(function() {
   //same stuff as before        

  });
});

现在 rails 控制器只用 json 响应,没有 html 响应。我在两者中看到的区别是,两者都可以很好地提交给控制器,但在第一种情况下,请求应该是 json,响应是 json,所以它工作正常。但在第二种情况下,即使我指定'dataType:“JSON”',请求也是html类型,响应是html,我被重定向到表单操作页面,当我按下后退按钮导航到相同页面,我已注销。所以我想知道为什么导航到后台也会让我退出。

那么 $(somthing).submit(function(){}); 有什么区别?和 $(somthing).live('submit', function(){})。他们都发布到操作中,但是一个正在创建一个 html 请求,而另一个正在创建一个 json 请求,一个实际上将我从应用程序中注销,而 otehr 没有?

4

1 回答 1

0

.submit调用.bind元素本身,同时.live将事件侦听器附加到文档并等待它冒泡。实际上,如果您删除该元素并创建一个新的相同元素,则添加的侦听器bind将被删除,而添加的侦听器.live则不会。

我们无法用您提供给我们的大量信息来回答这个问题。尝试登录valuesToSubmit到控制台并查看是否存在任何差异(如果存在差异并且您不知道它为什么会影响任何东西,请发回此处,我们可以提供帮助)。

.live并且.bind在 1.7 版中都已弃用,您应该考虑升级并查看会发生什么。也不需要返回值。您需要以下代码:

$(document).ready(function() {
  $(document).on('submit', 'form#myform', function() {
   //same stuff as before        

  });
});
于 2012-06-20T11:31:39.613 回答