双击惹的祸-如何避免后台功能重复执行
典型场景:
点击“保存”后,后台将数据保存到数据库中。经常发现数据保存不正常,或者保存两条,或者将原有数据删除。
经过反复测试,原来是双击惹的祸。
分析:
双击有两种情况,一种是用户点击“保存”按钮是双击鼠标,这是比较常见的情况;另一种是单击保存后,后台
处理较慢,用户着急再次单击。无论哪种情况都会造成后台功能执行两次,后果依据后台处理功能不同而不一样。
解决:
单击后因后台处理较慢再次单击,这种情况比较好避免,前端单击处理事件中设置保存按钮不可用即可。但即便
如此也避免不了双击造成的执行两次后台功能,因为双击会触发两次单击事件(浏览器不同可能处理方式不同,但
IE是这种机制)。因此,解决双击问题的思路是在第一次进入单击事件中尽快设置互斥标志,第二次进入时检查标志
避免重复进入真正的处理代码。办法如下:
需要注意的是,如果逻辑上需要允许用户再次单击保存(比如保存过程中出错了),那么应该找一个时机执行:
setMenuItemEnabled(menu, 'save', true).
这个时机一般应该是后台生理完毕之后,回到前台时执行。
例子中简单地在其它按钮事件中执行:
典型场景:
点击“保存”后,后台将数据保存到数据库中。经常发现数据保存不正常,或者保存两条,或者将原有数据删除。
经过反复测试,原来是双击惹的祸。
分析:
双击有两种情况,一种是用户点击“保存”按钮是双击鼠标,这是比较常见的情况;另一种是单击保存后,后台
处理较慢,用户着急再次单击。无论哪种情况都会造成后台功能执行两次,后果依据后台处理功能不同而不一样。
解决:
单击后因后台处理较慢再次单击,这种情况比较好避免,前端单击处理事件中设置保存按钮不可用即可。但即便
如此也避免不了双击造成的执行两次后台功能,因为双击会触发两次单击事件(浏览器不同可能处理方式不同,但
IE是这种机制)。因此,解决双击问题的思路是在第一次进入单击事件中尽快设置互斥标志,第二次进入时检查标志
避免重复进入真正的处理代码。办法如下:
需要注意的是,如果逻辑上需要允许用户再次单击保存(比如保存过程中出错了),那么应该找一个时机执行:
setMenuItemEnabled(menu, 'save', true).
这个时机一般应该是后台生理完毕之后,回到前台时执行。
例子中简单地在其它按钮事件中执行:
相关推荐
4. UNIX下如何重复执行历史命令,以及提示完整路径的快捷键 ksh -o vi,可以在.profile文件中加入 ksh -o vi,然后每次在命令行输入前面几个没有重复的字符后,双击esc键。更大的功能是vi编辑中的绝大多数命令都适用...
-修正EnableMaximize属性不能使Window最大化的BUG,修正了双击标题栏不能最大化的BUG。 -删除Button控件的SystemIcon属性,比如以前这样定义SystemIcon="Close",现在需要这样定义Icon="SystemClose"。 -Window...
可能有重复,你可以在整理时删除重复的网站。 获得的网址可以导出保存,供他用。也可以从外部导入再次使用。 4。扫描验证 获得网址后,就可以载入网址进行扫描验证了。当然你可以点右键进行修改,或去掉不想要的网址...
可能有重复,你可以在整理时删除重复的网站。 获得的网址可以导出保存,供他用。也可以从外部导入再次使用。 4。扫描验证 获得网址后,就可以载入网址进行扫描验证了。当然你可以点右键进行修改,或去掉不想要的网址...
可能有重复,你可以在整理时删除重复的网站。 获得的网址可以导出保存,供他用。也可以从外部导入再次使用。 4。扫描验证 获得网址后,就可以载入网址进行扫描验证了。当然你可以点右键进行修改,或去掉不想要的网址...
退出 退出当前程序,所有计时任务将不被执行。 注:1.21版之后可以设置“禁止退出”,启用了“禁止退出”设置该操作将无效。 结束 关闭 即时,关闭计算机或操作系统。 重启 即时,重启计算机操作系统。 注销 ...
人力资源管理软件功能介绍 本人力资源软件包含人事档案管理 本人力资源软件包含工资管理 本人力资源软件包含考勤管理 本人力资源软件包含绩效管理 本人力资源软件包含用户管理 本人力资源软件软件界面美观,...
-修正EnableMaximize属性不能使Window最大化的BUG,修正了双击标题栏不能最大化的BUG。 -删除Button控件的SystemIcon属性,比如以前这样定义SystemIcon="Close",现在需要这样定义Icon="SystemClose"。 -Window...
11、修正软件缩小至任务栏通知区域时,双击无法打开主窗体问题 12、对驱动更新说明位置文字进行微调,软件更加美观 ============================================================ 2.1.2.0527 版(2009 B2版) What...
双击鼠标中键 复原窗口功能 双击鼠标右键 取消所有操作,回到初始状态 (以上快捷键不区分大小写),其它快捷键与mapgis相同。 在编辑视图中,如果状态为准备状态,按住Ctrl右击,将弹出常用图元编辑快捷菜单;按住...
参数 是否后台, 逻辑型, 可空, 默认为假:可见到的颜色点 真:后台窗口内颜色点 .参数 色深, 整数型, 可空, 所截取的图片位深度,默认为16位(8,16,24,32) .子程序 超级延迟, , 公开, 无资源占用的延时(无返回值) .参数...
这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要把 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! 如题。详细见源码。 GMem 内存管理单元源码。GMem.cpp...
完整的在.net后台执行javascript脚本集合 ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 经典正则表达式 delegate vs. event 我是谁?[C#] 表达式计算引擎 正式发布表达式计算引擎WfcExp V0.9(附源码) 运算...
这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要把 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! GMem 内存管理单元源码。GMem.cpp和GMem.h是内存管理...
这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要把 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! GMem 内存管理单元源码。GMem.cpp和GMem.h是内存管理...
这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要把 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! GMem 内存管理单元源码。GMem.cpp和GMem.h是内存管理...
这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要把 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! GMem 内存管理单元源码。GMem.cpp和GMem.h是内存管理...
这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要把 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! GMem 内存管理单元源码。GMem.cpp和GMem.h是内存管理...
参数 标识, 文本型, 可空, 如果有多个程序用到禁止重复运行功能,建意给每个程序定个不同的标识.任意文本 .参数 窗口句柄, 整数型, 可空, 如果参数被省略,不还原最小化的窗口 .子程序 _卸载热键, 逻辑型, 公开, ...