如果用户没有保存表单,如何测试用户是否对表单进行了任何更改
How to test if users has made any changes to a form if they haven't saved it
基本上与stackoverflow在发布问题时相同的功能,如果你开始写帖子,然后尝试重新加载页面。你会得到一个javascript警告框警告消息。
我知道如何检查表单是否已更改,尽管我如何做下一步。
。E:当我离开这个页面时,我怎么检查这个,在这里你得到"这个页面要求你确认你想离开-你输入的数据可能不会被保存。"
编辑:在这里找到另一个问题的正确答案https://stackoverflow.com/a/2366024/560287
我敢肯定,如果你搜索"jQuery检测表单更改插件",你会发现一些比我即将编写的半伪代码更有用的东西:
formChanged = function(form) {
form.find('input[type="text"], textarea').each(function(elem) {
if (elem.defaultValue != elem.value) {
return true;
}
});
// repeat for checkbox/radio: .defaultChecked
// repeat for ddl/listbox: .defaultSelected
return false;
}
用法:
if (formChanged($('form')) { // do something }
注意,这是为了检测对原始呈现值的更改。例如,如果一个文本框的值为"x",用户将其更改为"y",然后再将其更改回"x";这将检测为NO。
如果你不关心这个场景,你可以这样做:
window.formChanged = false;
$(':input').change(function() {
window.formChanged = true;
});
然后你可以检查这个值
是的,它是JavaScript,因为HTML只是一种标记语言。
是的,jQuery可以用于此。它比普通的JavaScript更可取,因为它使事情更容易,尽管它确实增加了一些开销。
有很多方法可以检查表单的控件是否发生了变化。
要检查默认值的更改,大多数可以根据defaultValue属性进行检查。对于单选按钮,默认情况下应该总是选中一个,因此检查它是否仍处于选中状态。类似地,对于选择,为默认选项设置selected属性,并查看它是否仍然被选中,依此类推。
或者,如果你的所有表单控件都有一个ID或唯一的名称,你可以收集它们的所有值,然后在提交表单时检查它们的值。
另一种方法是监听每个表单控件上的更改事件,但这有点过头了。
这是一个POJS版本,采用与rkw的答案相同的方法:
/*
Check if any control in a form has changed from its default value.
Checks against the default value for inputs and textareas,
defaultChecked for radio buttons and checkboxes, and
default selected for select (option) elements.
*/
function formChanged(form) {
var control, controls = form.elements;
var tagName, type;
for (var i=0, iLen=controls.length; i<iLen; i++) {
control = controls[i];
tagName = control.tagName.toLowerCase();
type = control.type;
// textarea
if (tagName == 'textarea') {
if (control.value != control.defaultValue) {
return true;
}
// input
} else if (tagName == 'input') {
// text
if (type == 'text') {
if (control.value != control.defaultValue) {
return true;
}
// radio and checkbox
} else if (type == 'radio' || type == 'checkbox') {
if (control.checked != control.defaultChecked) {
return true;
}
}
// select multiple and single
} else if (tagName == 'select') {
var option, options = control.options;
for (var j=0, jLen=options.length; j<jLen; j++) {
option = options[j];
if (option.selected != option.defaultSelected) {
return true;
}
}
}
}
// Not really needed, but some like the return value to
// be a consistent Type
return false;
}
注意,您需要小心选择元素。对于单个选择,你应该总是设置一个选项为选中,因为如果没有默认选择,有些浏览器会选择第一个选项,而其他浏览器则不会。
- 从表单中获取用户输入执行计算(操作顺序)并输出回该表单
- 我确实有一个表单,如果用户输入了输入,它应该检查否定或空的输入框,并抛出一条警告消息
- 如果用户没有更改,则表单值为空
- 谷歌表单-根据分配给谷歌应用程序的工作为商业用户预先填充多项选择列表
- 如何在用户提交表单之前访问text_field的内容
- HTML.如何检查用户是否在表单中输入了文本
- 阻止用户在Netsuite中使用标准/未自定义的表单
- 如何停止javascript的执行并允许用户保存表单
- 如何根据用户输入的数字动态地向表单添加文本字段
- 如何使用 HTML 中的表单框获取用户输入
- 流星 - 添加带有熨斗的路由后无法提交用户.路由器到登录和注册表单
- 纯javascript的进度图像加载程序仅当用户单击提交html表单时
- Jquery:如何处理"停止/取消”;用户停止表单提交时的事件
- 如何从HTML表单中获取用户输入并将其存储在现有的JavaScript数组中
- 根据用户表单输入动态生成 SQL 语句
- 用户登录后,将立即提交用户表单
- 为什么我不能在Javascript中提取和计算用户表单输入?
- Regex不触发用户表单
- 我的sisyphus.js/jquery html有什么问题?在重新打开页面时丢失用户表单输入
- 如何在添加用户表单上禁用浏览器的保存密码功能