我想在主文件中写Jquery代码,这样如果用户更改了页面,并且有任何未保存的更改,用户应该得到提醒。我从这里得到了一个答案:link
然而,在大多数解决方案中,我将不得不在所有页面上编写代码。我希望它只在一个地方编写,这样每个人都不必担心在他们的模块中编写它。我的代码如下:
<script type="text/javascript">
var isChange;
$(document).ready(function () {
$("input[type='text']").change(function () {
isChange = true;
})
});
$(window).unload(function () {
if (isChange) {
alert('Handler for .unload() called.');
}
});
</script>
但是每次我在文本框中进行更改时,change()事件都不会触发。
代码中可能有什么错误?
编辑:我把.change()改成了.click,它被触发了。我使用的是jquery 1.4.1 ...是因为jquery版本的原因吗?
7条答案
按热度按时间tnkciper1#
这是我正在使用的,把所有这些代码放在一个单独的JS文件中,并加载到您的头文件中,这样您就不需要一次又一次地复制:
未找到$的编辑:
此错误只能由以下三种情况之一引起:
1.你有一个拙劣的jQuery版本,这可能是因为有人编辑了核心文件,或者插件覆盖了$变量。
1.在页面完全加载之前运行JavaScript,因此在jQuery完全加载之前运行JavaScript。
确保所有的JS代码都被放置在这个:
编辑保存/发送/提交按钮例外
编辑以使用动态输入
将上述代码添加到alert_unsaved_changes. js文件中。
iyfamqjs2#
使用以下形式序列化的版本:
当dom就绪时,执行以下代码:
如果用户更改字段,然后手动回滚,则不会显示警告
vngu2lb83#
如果你需要它在每次更改时被调用(即使焦点仍然在输入字段中),你将不得不依靠 keyup 和一堆事件的组合来跟踪只使用鼠标的粘贴/剪切。
我希望你知道你的方法来检测变化是不是最好的一个?如果用户输入一些文本,离开字段,然后恢复更改脚本仍然会提醒他修改文本。
agyaoht74#
你应该为输入和文本区域注册事件,如果你指的是文本区域和文本框。你可以为isChange使用keyup,这样你就不用等待用户模糊这个区域。
xj3cbfub5#
为什么不简单地将事件绑定到
change
回调呢?作为额外的好处,您可以使用
confirm
并选择触发更改事件的最后一个元素:如果你有一些保存按钮,确保它解除unload事件的绑定:
2w2cym1i6#
这实际上只是@AlphaMale答案的不同版本,但在几个方面有所改进:
这在以下方面更好:
page:
事件绑定。dly7yett7#
我使用
$('form').change
等函数来设置一个脏位变量。不适合捕捉所有的变化(根据前面的答案),但捕捉所有我感兴趣的,在我的应用程序。