我有一个带有提交按钮的表单,它工作正常,但我现在有一个用户请求,如果单击页面上的链接并且表单“脏”,表单将被保存(发布到保存操作)
我已经通过拥有一个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操作。
答案 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
});
});