我想使用表格序列化,但是从序列化中排除按钮和标签。
这是我拥有的javascript版本:
var saveBtn = document.getElementById("btnSaveButton");
var saveLbl = document.getElementById("lblSaveLabel");
var originalFormData = $("#MasterForm").not(saveBtn, saveLbl).serialize();
$("form :input").on('change keyup paste mouseup', function () {
var newFormData = $("#MasterForm").serialize();
if (originalFormData != newFormData) {
//some code
} else {
//some other code
}
});
请参阅:.not(saveBtn,saveLbl)
那不排除按钮或标签。
有人可以帮助我,让我知道如何从序列化中排除按钮和标签吗?
实际上,我会根据用户是否对表单进行任何更改,将显示从按钮切换到标签,然后再切换回标签。
UPDATE UPDATE
谢谢您的回应...似乎有些不对劲...
可能有太多的html不能在此处发布...
使用vb.net。我有一个母版页,其中有一个名为Admin.aspx的页面,其中有一个名为Bundles.ascx的用户控件。
在Bundles.ascx的代码中,我有以下javascript:
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_pageLoaded(prmRequest);
prm.add_endRequest(prmRequest);
function prmRequest(sender, args) {
setupFormChangeCheck("btnSaveBundle", langId);
}
在一个主要的javascript文件中,我具有函数setupFormChangeCheck,它看起来像这样:
function setupFormChangeCheck(txtName, langId) {
try {
savebtnFnctn('dis', txtName, langId)
var originalFormData = $("#MasterForm").serialize();
$("form :input").on('change keyup paste mouseup', function () {
var newFormData = $("#MasterForm").serialize();
if (originalFormData != newFormData) {
savebtnFnctn('en', txtName, langId)
} else {
savebtnFnctn('dis', txtName, langId)
}
});
} catch (err) { }
}
在同一主javascript文件中,我具有函数savebtnFunction,它看起来像这样:
function savebtnFnctn(event, txtName, langId) {
var saveBtn = document.getElementById(txtName);
var saveLbl = document.getElementById(txtName.replace("btn", "lbl"));
if (event == 'en') {
saveBtn.style.display = "inline";
saveLbl.style.display = "none";
} else if (event == 'dis') {
saveBtn.style.display = "none";
saveLbl.style.display = "inline";
}
}
用户控件是动态加载的,因为同一页面上有多个使用控件,并且除非我动态加载一个控件,否则所有加载...都会使速度减慢。
动态加载用户控件会导致严重的回发挑战。因此,绝大多数用户控件交互都是通过jquery在客户端进行处理的。对于Bundle.ascx,这是在Bundle.js中完成的
SOOOOO ....
加载用户控件后,将触发setupFormChangeCheck,它在功能savebtnFnctn中运行'dis'(禁用)事件。
这是我今天在尝试上述建议中的代码时注意到的问题。
当我在Bundle uc中进行交互时,setupFormChangeCheck从一开始就不会触发。首先触发的是这行$(“ form:input”)。on('change keyup paste mouseup',function()
无论我做什么,即使没有更改也单击文本框会导致以下结果:originalFormData!= newFormData为true,并且“保存”按钮保持启用状态...
我应该补充说,捆绑用户控件中的所有控件都在一个updatepanel中:
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
长解释,我知道,对不起...如果有人有解决这个问题的想法,我将永远感激不已。
谢谢。埃里克
答案 0 :(得分:0)
jQuery的.not()方法使用选择器,而不是元素。 另外,您要匹配表单本身,而不是表单的输入。
由于您确实知道要排除的元素的ID,因此请改用它:
var data = $("#MasterForm").find("input, textarea, select").not("#btnSaveButton, #lblSaveLabel").serialize();
注意:您应该使用严格比较!==
而不是!=
。