如何使用jQuery发布表单?

时间:2010-09-09 22:09:45

标签: javascript jquery asp.net-mvc

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

我已经通过拥有一个isDirty JavaScript变量来实现逻辑,现在我想在它变脏时从JavaScript函数发布表单。

我的表格声明如下:

    <form id="formSmart" action="<%= ResolveUrl("~/SmartForm/Proceed") %>"
          method="post" enctype="multipart/form-data">

我的JavaScript是:

function checkLink() {
  if (isDirty) {
    $("#formSmart").submit();
  }
}

不会调用proceed操作,但是当我单击表单上的提交按钮时,它可以正常工作。我在JavaScript中做错了什么?

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

3 个答案:

答案 0 :(得分:1)

听起来要求是“点击页面上的链接”。

也许将此事件附加到页面上的所有<a>标记。

$(document).ready(function() {
    // all <a> tags get the checkLink attached to them
    $("a").click(checkLink());
});

答案 1 :(得分:1)

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

您确定要拨打checkLink并且isDirty等于true吗?

在您提交alert('Test');范围之前将if置于正确的位置。

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

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

请注意return false,这会导致您的链接无法执行导航。如果您希望链接导航,则可以删除该部分。

答案 2 :(得分:1)

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

UGLY解决方案:
你可以买它在隐藏的领域保存点击的网址,
返回false以停止导航,
并在提交后检查一个值,如果存在则执行导航

更好的解决方案:
通过ajax发布表单并在ajax调用完成后(无需检查成功或错误)执行导航(使其变得非常简单只需使用ajaxForm ajaxForm plugin
这个解决方案唯一的问题是如果链接有target =“_ blank”,那么你必须使用window.open,它可能被弹出窗口阻塞器阻止了 you can play with a simple jsbin sample i prepared showing this

此示例将一些值发布到此页面的旧版本+导航到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>

这是JS:

$(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
  });
});​