有一个div(表单),只需单击一个按钮即可打开。这种形式中有某些控件,如时域,日期,文本框。表单打开时,它预先加载了数据。表格的提交按钮(应用更改)也在那里。
如果我只是点击"应用更改"按钮没有更改窗体中的任何内容,不执行任何操作,但如果我更改了时间,日期或文本,表单将被保存。
我们如何定义这种行为?
对于错误解释的语言感到抱歉......
如果我只是点击"应用更改"我的表单没有保存。按钮。 在jquery中保存表单之前是否需要编辑其中一个控件?
答案 0 :(得分:1)
您可以处理表单中所有控件的change
事件,当控件的值发生更改时,在<form>
元素上设置一个标志(例如,使用data()) ,然后只有在设置了这个标志时才允许提交表单:
$("form").on("change", ":input", function() {
$(this).closest("form").data("someControlHasChanged", true);
}).on("submit", function(e) {
if (!$(this).data("someControlHasChanged")) {
e.preventDefault();
}
});
答案 1 :(得分:1)
以下是跟踪表单数据更改的粗略方法:
function dealWithForm(){
var hasChanged = false,
$form = $('form');
$('input, select', $form).on('change', function(){
hasChanged = true;
});
$('form').submit(function(){
if(hasChanged){
$form.submit();
// or post asynchronously with ajax
hasChanged = false;
$.post( // blah blah );
} else {
// stop form from submitting.
return false;
}
});
}
$(document).ready(function(){
dealWithForm();
});
答案 2 :(得分:0)
目前尚不清楚是否要自动发布更改,或者如果您希望在点击“应用更改”时发布更改。 (但如果没有做出任何更改,那么应用更改应该什么都不做。
最简单的方法是将旧值声明为javascript变量。为applyChanges添加一个onclick处理程序,将每个旧值与当前表单值进行比较。 如果有变化,请发布。
我能看到的唯一问题是“/”需要转义/未转义。 一个更脏的解决方法/黑客是使用旧值生成不可见的div。
并在那里生成旧字段。然后${oldFIeld1}.text()
检索它。
请注意,这可能是一个黑客攻击或许其他人有一个微妙的方法来避免逃避/失败。