【问题描述】: 点击输入框弹出软键盘–>点击上传图片(input type=file)–>此时键盘收起 弹出上传图片/拍照/取消选项–>点击取消–>选项消失,键盘弹起–>遮挡(如图二)
【心路历程】 1.一开始考虑的就是捕获到那个取消的动作,然而input file点击取消的时候内容没改变,并不会触发change 事件。而且,我在触发input file之前,绑了一个alert,关闭弹窗后依旧有软件盘(这是另一部ios8手机上的表现,所以点击取消只是诱因吧,起一个阻塞的作用,软键盘该出还出来); 2.软键盘与当然与focus、blur事件有关,于是我给所有的input、textarea绑上了focus、blur事件,alert事件名和类名,以此标记。然而之后软件键盘的弹出和收起并不会触发任何的focus、blur事件。(我开始怀疑人生了。。。难不成是input file,可是它又没有focus。。); 3.我想竟然我不能通过blur事件把软件盘收回去,那我就判断键盘是否弹出,把输入框抬上来好了。然而键盘弹出,在ios上并不能触发resize事件。。(我能怎么办,我也很绝望啊) 4.难道是客户端的锅?于是又去找了ios的开发,他告诉我这锅不是他的是系统的锅。。我想,难道是系统还没反应过来,以为没收回去,于是加了个延迟触发,然后。。改好了。。
【解决】 给inpu file的父框绑一个click事件,然后延迟300ms去触发 input file;
$('#parent').click(function(){ setTimeout(function(){ $('input.pic').trigger('click'); });});【总结】 ①只用input[type=file],内容变化的时候才会触发change事件; ②input file,没有focus事件; ③键盘弹出,在ios上并不能触发resize事件。
新闻热点
疑难解答