浏览 21545 次
锁定老帖子 主题:focus不起作用的问题。
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-06-27
对一个input对象(text)加onkeydown事件,在按下某个键时候,将该input对象append到下个obj上,然后调用focus(),结果input并没有得到焦点,在调用focus()前,加一个alert(),却可以起作用。请问是什么问题? singleInputbox.onkeydown = function(){ //debug(event.keyCode); switch(event.keyCode){ case 27: //Esc singleInputbox.style.display = "none"; var indexArr = singleInputbox.id.split( "_"); var lastCell = tb.rows[indexArr[0]].childNodes[indexArr[1]] ; lastCell.innerHTML = singleInputbox.value ; singleInputbox = null ; break ; case 13: case 39: //Enter,Right var indexArr = singleInputbox.id.split( "_"); var lastCell = tb.rows[indexArr[0]].childNodes[indexArr[1]] ; lastCell.innerHTML = singleInputbox.value ; //debug(singleInputbox.id); if(indexArr[1]<tb.rows[0].cells.length -1 ){ //move to next cell var intt = Number(indexArr[1])+1 ; var nextCell = tb.rows[indexArr[0]].childNodes[intt] ; singleInputbox.id = inrow.rowIndex + "_" + nextCell.cellIndex; singleInputbox.value = nextCell.innerHTML ; nextCell.innerHTML= ''; singleInputbox.size = singleInputbox.value.length + 2 ; nextCell.appendChild(singleInputbox); //alert(1); //~~~~here~~~~~~ singleInputbox.focus(); }else{ singleInputbox.style.display = "none"; singleInputbox = null ; } break ; } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-06-27
一个可能的原因是:在执行一段脚本时,对dom的操作不是即时生效的。浏览器可能执行完当前脚本所有代码后才真正处理脚本中对dom的操作。因此我在处理这种情况的时候,在settimeout指定的函数中执行某个input的focus()方法
|
|
返回顶楼 | |
发表时间:2007-06-28
nextCell.appendChild(singleInputbox); window.setTimeout("document.getElementById('"+singleInputbox.id+"').focus();", 50) ; 果然有效! |
|
返回顶楼 | |
发表时间:2007-06-28
当时焦点本在你的input里,所以你append之后,首先会被remove,焦点就消失了。那么ie要把焦点重置到某个地方的,比如它的parentNode。而你直接调用focus方法是在重置之前,就可能不起作用了。
问题的关键是ie的焦点不仅有浏览器自身逻辑焦点,而是会被映射到windows控件焦点。两者的同步是存在一定问题的,因此ie经常会出现一些奇怪的丢焦点问题。例如你开启着输入法的时候点击一个vml图像,焦点就会消失,此时你可以输入一些汉字看看发生什么奇怪的事情,呵呵。 所以hexiaodong的方法就起作用了。推而广之,许多时候碰到奇怪问题,延时可以解决问题。 不过这并不是说dom操作不是即时生效。dom操作确实都是同步的。但是因dom改变而触发的事件,以及其他一些效应(例如样式应用),很可能是异步的。 |
|
返回顶楼 | |
发表时间:2007-06-28
是的。
IE的事件处理方式和标准很不一样。我程序写到事件处理的时候,就不能兼容Firefox了。 |
|
返回顶楼 | |
发表时间:2007-06-29
我分别在ie和ff下使了一下,在ff下一切正常不仅有焦点而且还能把刚输入的值也打上,在ie下不仅失去了焦点而且刚输入的值也随着移动没了。
|
|
返回顶楼 | |
发表时间:2007-06-29
因为ff用的是自己的跨平台的控件,没有用windows控件,所以不存在html逻辑控件与win控件的同步问题。
|
|
返回顶楼 | |