恼人的JavaScript“小”问题 —— 避免Form被多次提交

这两天项目里遇到的一个Bug。一个查询表单,输入条件后点submit button或按回车键(无论Form域有没有被Focus)来提交表单。为了处理Form域没有Focus时也要响应KeyPress事件,实现了响应document对象的KeyPress事件的方法,在里面调用Submit的click方法,模拟Submit按钮被点击。但在Form域有Focus的情况下,这样的实现会造成Form被多次提交。

昨天为这个Bug加班到快到零点(一开始居然没想到是Form多次提交的问题,一直在后台Java程序里查来查去,汗。。。)

今天试过用Google发现的一些解决方法,比如(还没有试提交一次后disable按钮的方法)

效果不太好,最终(下班之前)的方案是在使用以上防止多次提交的同时,把Submit按钮换成普通的button,在button的onclick事件和document的onKeyUp事件里调用Form的submit方法,效果还不错。

写这些的时候,查到了disable submit button的方法,明天试试。

还有,找到了dev2dev论坛里一个介绍Structs如何处理多次提交问题的帖子。当然,已经跟javaScript没关系了。项目没有用到Struts,先收藏再说。

更换S60 SDK Emulator的skin(更正)

更换S60 SDK Emulator的skin”里我写到要是能动态更换Skin就好了,其实Emulator已经有这个功能了,就是它的System菜单下的Next Config项。不同的配置由epoc.ini中的configuration关键字指定。比如我现在的epoc.ini的内容是这样的:


configuration epoc_6630.ini
configuration epoc_NGage.ini

现在,点击Next Config...,就可以切换6630和NGage这两个Skin了。

bmconv的使用

用Carbide可以编辑一个mbmdef文件,加入要使用的bmp文件,make时会根据这个mbmdef文件生成mbm文件。不过,Carbide不会生成需要的mbg头文件。我用bmconv工具来创建mbg文件:

bmconv /hMyDemo.mbg mydemo.mbm cross.bmp not.bmp

可以把bmconv命令设为Pre-build step。