Jquery MVC3Ajax函数发布两次
我正在将VisualStudio2010和MVC3与AJAX/JQuery一起使用。我遇到的问题是代码发布了两次。只有当你发布一些东西,然后再做一次时,才会发生这种情况 这是我的JS:Jquery MVC3Ajax函数发布两次,jquery,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-controller,Jquery,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc Controller,我正在将VisualStudio2010和MVC3与AJAX/JQuery一起使用。我遇到的问题是代码发布了两次。只有当你发布一些东西,然后再做一次时,才会发生这种情况 这是我的JS: $(document).ready(function () { BindEvents(); }); function BindEvents() { $('#OpenCommentDialog').click(function (event, ui) { var id = $(this).attr(
$(document).ready(function () {
BindEvents();
});
function BindEvents() {
$('#OpenCommentDialog').click(function (event, ui) {
var id = $(this).attr('data');
$('#NewCommentDialog').dialog({
open: function (event, ui) {
$('#BugID').val(id);
var form = $('form', '#NewCommentDialog');
form.submit(function (e) {
var comment = form.serialize(true);
CreateComment(comment);
return false;
});
}
});
$('#NewCommentDialog').dialog('open');
return false;
});
}
function CreateComment(comment) {
if (comment != null) {
$.post('/Comments/Create/', comment, function (data) {
if (data == 'Success') {
var id = $.parseQuery(comment);
GetComments(id.BugID);
$('#NewCommentDialog').dialog('close');
}
});
}
}
function GetComments(id) {
$('#Comments').find('tr').remove();
$.getJSON('/Comments/GetComments', { id: id }, function (data) {
if (data != null) {
if (data.length > 0) {
$('#CommentListTemplate').tmpl(data).appendTo('#Comments');
}
}
});
}
我的HTML页面有一个JQuery对话框,它调用CreateComentPartial.cshtml文件。当用户填写时,它调用“CreateComment”函数,然后调用“GetComments”,并在发布新的注释后刷新注释
现在,问题来了。如果再次单击“CreateComment”链接,而不重新加载页面并填写表单,“CreateComment”将触发两次,“GetComments”也将触发两次Firebug也向我展示了这一点。
我做错了什么?如果在发布后重新加载页面(F5),则不会执行此操作。但它违背了目的。您应该能够多次提交评论,而无需重新加载页面。您在哪里声明了上述脚本?我对通过局部视图添加到页面的脚本也有类似的问题。不知何故,每次点击一个按钮,脚本都会被添加到页面中,从而将脚本和帖子的数量相乘(脚本的每个副本触发一次)。我将脚本放在一个单独的.js文件中,并在母版页中引用它,从而解决了这个问题。这个问题是由方法调用两次引起的,您可以使用一个开关变量来解决它,您何时将事件关联到控件 例如:
var $isActualizaComentarioEventoAsignado = false;
if (!$isActualizaComentarioEventoAsignado) {
$isActualizaComentarioEventoAsignado = true;
$('#pepe').bind('clic', function(e) {});
}
上面的脚本位于JavaScript文件中。我在共享文件夹中的_Layout.cshtml文件头中声明了脚本。我自己找到了答案。需要在form.submit之前添加“form.unbind('submit');”