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