Javascript 如何使用jQuery发布表单?

Javascript 如何使用jQuery发布表单?,javascript,jquery,asp.net-mvc,Javascript,Jquery,Asp.net Mvc,我有一个带有提交按钮的表单,它可以正常工作,但现在我有一个用户请求,如果单击页面上的链接并且表单是“脏”的,则需要保存表单(发布以保存操作) 通过使用isDirty JavaScript变量,我已经具备了相应的逻辑,现在我想在表单变脏时从JavaScript函数发布表单 本人声明如下: <form id="formSmart" action="<%= ResolveUrl("~/SmartForm/Proceed") %>" method="post

我有一个带有提交按钮的表单,它可以正常工作,但现在我有一个用户请求,如果单击页面上的链接并且表单是“脏”的,则需要保存表单(发布以保存操作)

通过使用isDirty JavaScript变量,我已经具备了相应的逻辑,现在我想在表单变脏时从JavaScript函数发布表单

本人声明如下:

    <form id="formSmart" action="<%= ResolveUrl("~/SmartForm/Proceed") %>"
          method="post" enctype="multipart/form-data">
继续操作没有被调用,但是当我单击表单上的提交按钮时,它工作正常。我在JavaScript中做错了什么


注意:对checkLink()的调用工作正常,最终的问题是$(“#formSmart”).submit();未发布到继续操作。

听起来要求“单击页面上的链接”

可能会将此事件附加到页面上的所有
标记

$(document).ready(function() {
    // all <a> tags get the checkLink attached to them
    $("a").click(checkLink());
});
$(文档).ready(函数(){
//所有标签都会附加检查链接
$(“a”)。单击(checkLink());
});

根据您发布的内容和姓名匹配,您有正确的方式提交表单

您确定正在调用
checkLink
,并且
isDirty
是否等于
true

放置并
警报(“测试”)就在提交之前,在
if
范围内

编辑:要连接您的活动,您需要执行以下操作:

$('#yourLinkID').click(checkLink(); return false;);

注意
返回false
,这将导致链接不执行导航。如果希望链接导航,可以删除该部分。

您的问题是浏览器在页面执行提交之前导航。
解决方案是在保存表单之前暂停导航

丑陋的解决方案:
您可以将单击的url保存在隐藏字段中,
返回false以停止导航,
提交后,检查是否存在值,如果存在,则执行导航

更好的解决方案:
通过ajax发布表单,在ajax调用完成后(无需检查是否成功或错误)执行导航(要使其真正简单,只需使用ajaxForm)
此解决方案的唯一问题是,如果链接有target=“\u blank”,则必须使用window.open,这可能会被弹出窗口阻止程序阻止

本例将一些值发布到该页面的旧版本中,并导航到google,打开fiddler,查看它是否先发布,然后导航

如果您进入jsbin页面,请停止阅读此处
以下是Html:

<form id="formSmart" action="http://jsbin.com/oletu4/edit" method="post">
<input type="text" name="someLie" />
<input type="text" name="someLie2" />
<input type="submit" value="submit" />
<a id="lnkNavOut" href="http://www.google.com">www.google.com</a>

我希望在单击超链接时调用该函数,因此我愿意以任何方式调用该函数(无论是在closed事件上还是在onclick事件上)。我基本上是试图消除表单中的数据丢失,并强制提交如果表单是dirtyYep,我添加了一个alert(),并且它正在触发,不会引发错误,但是我在控制器操作中的断点没有被命中。当我单击“提交”时,断点被命中。但我总是希望我的表单导航,只想执行提交(保存字段),但由于某些原因,没有调用我的控制器post。@Mark Kadlec你能验证
$(“#formSmart”)
是否返回正确的表单吗?有些事情看起来很奇怪,因为一切看起来都应该正常工作。。。也许这件事很简单,我们都忽略了。。。可能需要新的视角:)@Kelsey,谢谢你的帮助,有没有办法检查JQuery是否至少找到了表单并尝试进行提交?@Mark Kadlec只需添加以下警报:
alert($('#formSmart))。它应该显示类似于
[object]
的内容。如果没有,那么它就找不到您的表单。还要检查是否有什么东西可能会拦截提交服务器端(值得怀疑,但还有一件事需要检查)。谢谢Avi,我真的很欣赏Ajax解决方案,看起来很不错。
<form id="formSmart" action="http://jsbin.com/oletu4/edit" method="post">
<input type="text" name="someLie" />
<input type="text" name="someLie2" />
<input type="submit" value="submit" />
<a id="lnkNavOut" href="http://www.google.com">www.google.com</a>
$(document).ready(function(){
  $("#lnkNavOut").click(function(){
  var jqFormSmart = $("#formSmart");
  //check here if the form is dirty and needs to be saved
  var jqClickedLink = $(this);
  $.ajax({
          url: jqFormSmart.attr("action"),
          type: "POST",
          data:jqFormSmart.serialize(), 
          complete:function(){
          location = jqClickedLink.attr("href");
          }
       }); 
   return false;//stop navigation
  });
});​