在下面的jquery脚本中,我使用3个函数来创建,更新和保存 评论。当我创建一个新记录时,会调用create函数,如果我单击save,则记录 得救了。如果我刷新页面并想要更新记录,它就可以工作。 (更新然后保存功能)
但是当我想在创建/保存之后更新而不刷新页面时, 调用函数save而不是update / save。
我可能需要取消绑定事件,但它对我不起作用。 我的保存是通过点击和内部触发的,提交事件链接到一个元素。
我在某处读到这不是一个好习惯,但我读到的解决方案是触发提交 来自点击功能的事件,我试了但是它重新加载了我想避免的页面因为我正在使用 Ajax的。
修改
我放了一个跟踪,我可以看到,当我想在创建/保存之后更新时,它调用save方法但不进入方法内部,它也不会进入更新方法。调用的url包含save但具有更新调用参数。
... /blog/index.php/save
我的理解是在MVC模式中,控制器方法呈现视图。 由于在创建/保存之后呈现的最后一个视图是由保存操作控制器完成的,因此在完成之后完成提交将调用从中呈现视图的控制器。
任何见解都会受到欢迎。
$(document).ready(function() {
$("input.switch-input:radio").click(function(e) {
var comment = $(this).data('comment');
var val = $(this).data('val');
if (comment.length == 0){ // New record
$.ajax(
{
--> call url to create new record
});
}
else if(comment !== val){
if (confirm ("change comment?")){
$.ajax(
{
--> call url to update record
});
} else{
alert('no');
}
}
})
;
$('body').on('click','#saveComment',function(e) {
e.preventDefault();
var url = $(this).val();
$("#comment-form").submit(function(e) {
var postData = $(this).serialize();
$.ajax(
{
--> call url to save data
});
e.preventDefault(); //STOP default action
});
$("#comment-form").submit();
$("#comment-form").unbind('submit');
$("#saveComment").unbind('click');
});
});
答案 0 :(得分:0)
答案 1 :(得分:0)
我假设#saveComment是#comment-form中的提交按钮。在这种情况下,为什么不省去跟踪点击,阻止提交,手动触发提交等麻烦,只需先听取提交事件?
$('body').on('submit','#comment-form',function(e) {
e.preventDefault();
// Code to execute after the form was submitted and submission has been prevented
}
并且说过,如果你想分离它,你可以在那里做,但是你不能使用匿名函数,你必须命名它。
var submitHandler = function(e) {
e.preventDefault();
// Code to execute after the form was submitted and submission has been prevented
alert("hello");
// Detach event listener when suitable
$("body").off('submit','#comment-form', submitHandler)
}
$('body').on('submit','#comment-form', submitHandler);
这里的工作示例:http://jsfiddle.net/K3ePW/2/