页面载入中..

回到页首回到页尾

随机数求和

momo @ 2015.12.22 [ Development ]

题设:生成 N 个随机正整数,使他们的和等于某个数。JS 实现了一下,记录之:

点击查看 DEMO备用地址) | 源码调试


使用 iframe 避免表单刷新时的重复提交

momo @ 2015.12.15 [ Development ]

使用同步方式提交表单时最郁闷的事情就是刷新时表单重复提交了,一次重复提交以后,后续做各种操作(reset 表单、删除表单都不奏效)都很难避免,搜了一下网上的答案,无外乎以下两种:

  1. 改为 AJAX 进行表单交互;
  2. 改进服务端,使用一个中转页面进行 redirect

然而很多时候我们并不能去修改服务端(比如没有权限,或者后端功能已经趋于稳定、修改成本高),那么这样就不能避免重复提交了吗?于是我根据页面中转的思路使用 iframe 做了一次尝试,果然页面就不会重复提交了,方法如下:

  1. 为页面添加一个隐藏的 iframe(假设 css 中 .hide 的样式已经设置为了 display:none )
  2. 将 form 的 target 绑定到 iframe 上
  3. 编写 JS 绑定相关事件
  4. 这个逻辑的精髓在于,使用了一个 iframe 充当中间跳转页面的角色,在不需要修改后端代码的情况下既可以避开页面刷新重复提交了。当然,如果页面提交后,会有某些提示信息,也可以在 iframe 的 load 事件中进行监测,获取相应字符串以后再判断接下来做什么。获取 iframe 中的内容方法如下(以 body 为例):


解决 babel 6 升级后使用 import 关键字报错的问题

momo @ 2015.11.29 [ Development ]

有几个项目使用了 es6 + babelify(babel) + gulp 的发布工具,一开始用着还挺好,后来手贱 npm outdated 并升级了几个插件以后,就嗝屁了,编译时提示错误:

如果把 babelify 降级使用倒是可以正常,但是作为一个追新党不能忍,最后通过不懈的搜索终于发现了问题的所在,原来是 babel 升级为 6.0 后,对 es6 的支持从 core 里面分离开来,需要单独安装插件 babel-preset-es2015 和 babel-preset-react,并进行相关配置。安装方法如下:

gulpfile.js 的 transform 中需要添加如下配置(browserify 为例):

详细代码及插件结构参见:package.json, gulpfile.js


解决 Touch 事件与 Scroll 事件的冲突问题

momo @ 2015.11.29 [ Development ]

开发移动应用时会遇到一个 UI 里面既可以点击(touchend)又可以滑动(scroll window)的情况,如果同时绑定两个事件就会同时执行,这是我们所不愿意看到的情况。大致解决思路是通过一个变量标记当前的触摸状态,当手指移动时标记为正在拖拽,而没有移动的时候则标记为没有在拖拽。代码如下:


修复 OS X El Capitan 系统 GEM 无法使用的问题

momo @ 2015.10.08 [ Development, Mac ]

升级了 OS X El Capitan,各种问题纷至沓来,今天使用 compass 的时候就发现提示 – command not found 了,重新安装,也是各种报错,搜了一下有这个问题的人还真不少,解决方案是有的,一说是关闭 rootless 功能,不过这样个人感觉有些激进了,于是继续搜索,找到解决方案如下:

1. 打开终端;
2. 输入命令

3. 输入命令

4. 输入命令

5. 输入命令

问题解决。