我有两个非常相似的代码片段,一个是有效的,另一个不是: 这个有效:
$(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没有?
答案 0 :(得分:0)
.submit
在元素本身上调用.bind
,而.live
将事件侦听器附加到文档并等待它冒泡。有效的是,如果删除元素并创建一个新的相同元素,则使用bind
添加的侦听器将被删除,而使用.live
添加的侦听器则不会删除。
我们无法回答您提供给我们的信息量的问题。尝试将valuesToSubmit
记录到控制台并查看是否存在任何差异(如果存在差异且您不知道它为何会影响任何内容,请回复此处,我们可以提供帮助)。
.live
和.bind
都已弃用,您应该考虑升级并查看会发生什么。也没有必要返回一个值。您需要以下代码:
$(document).ready(function() {
$(document).on('submit', 'form#myform', function() {
//same stuff as before
});
});