jquery live('submit')和rails中提交的区别

时间:2012-06-20 11:25:34

标签: jquery ajax ruby-on-rails-3

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

$(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,所以它工作正常。但在第二种情况下,请求的类型为html,即使我指定'dataType:“JSON”',响应是html,我被重定向到表单操作页面,当我按下后退按钮导航到相同页面,我退出了。所以我想知道为什么导航到后页也会让我退出。

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

1 个答案:

答案 0 :(得分:0)

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

我们无法回答您提供给我们的信息量的问题。尝试将valuesToSubmit记录到控制台并查看是否存在任何差异(如果存在差异且您不知道它为何会影响任何内容,请回复此处,我们可以提供帮助)。

在版本1.7中,

.live.bind都已弃用,您应该考虑升级并查看会发生什么。也没有必要返回一个值。您需要以下代码:

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

  });
});