昨天修改机顶盒上面的epg页面,遇到一个小问题。用户购买游戏时需要弹出购买确认对话框,对话框的默认焦点规定必须停留在“取消”按键上。很简单的需求,使用javascript的focus()方法就可以实现了。简单的代码示例如下:
document.getelementbyid(cancel).focus()
但是苦逼的是,机顶盒真是一个大坑。由于要兼容所有现存的机顶盒型号,需要对8款机顶盒进行适配。然后就出现问题了!一款中兴b600的机顶盒完全没法将焦点设置到取消按键上。以下是我的解决思路:
首先确认该机顶盒是否支持getelementbyid()方法以及是否成功获得了id为“cancel”的元素:测试方法很简单,直接另写了一个 test
,然后在同样的地方获取id为“test”的元素,并进行了简单的操作document.getelementbyid(test).innerhtml=hello
最后使用了“try...catch(e)...”捕捉“focus()”失败的原因
try(){ document.getelementbyid(cancel).focus() }catch(e){ alert(e.name + : + e.what()); }
但是就是很奇怪!以上两步的结果表明该机顶盒支持focus()和getelementbyid(),但是就是无法设置焦点到弹出的对话框中。
前前后后折腾了一个多小时,最后大boss出现了,就简单说了一句话就解决了这个问题!有可能要主动调用flur()将原来的焦点取消掉!
document.getelementbyid(purchase).flur()
然后就解决了这个问题。不得不感概!在解决这个问题的过程中,自己的思路其实还是蛮正确的,但知识面显然不够。一般程序员和高级程序员的差距除了解决问题的思路方面,也有经验和知识面的差距!