<body>
<form name="f1">
<input type="text" name="t1" onkeydown="document.f1.t2.value=document.f1.t1.value" />
<input type="text" name="t2" />
</form>
</body>
上面的代码小弟目的是想实现两个文本框的联动输入(英文),但是效果却不太好,输入的时候t2比t1慢一拍,比如t1输入abcd,此时t2的内容为abc。请问是为什么?
ps:用setTimeout可以实现这个效果,我想问一下上面的问题。
<form name="f1">
<input type="text" name="t1" onkeydown="document.f1.t2.value=document.f1.t1.value" />
<input type="text" name="t2" />
</form>
</body>
上面的代码小弟目的是想实现两个文本框的联动输入(英文),但是效果却不太好,输入的时候t2比t1慢一拍,比如t1输入abcd,此时t2的内容为abc。请问是为什么?
ps:用setTimeout可以实现这个效果,我想问一下上面的问题。
解决方案 »
- 用户能不能绕过部分JS代码呢?
- jQuery元素筛选问题
- 怎样单击客户端Img图像控件时调用服务器里的函数并把它的ID作参数传递给该函数?
- 请看下面的代码,解释在点DIV导致IFRAME失去焦点的原因及提供解决方法[除指定文字或图片的ONCLICK]
- nodejs请求方式和header数据问题
- 判断一个窗口是否已经打开??????
- 急救,isNaN函数是做什么用的?在线等。
- 谁能帮我改进一下下面的代码:将一个层动态移动到另一个指定位置、指定大小的层~~谢谢~~
- javascript精粹 正则表达式
- 为何正则/[a-zA-Z\s]+/g能匹配字母加数字?
- 浮动窗口,右边下拉框为什么可以无限下拉,请高手帮忙!
- javascript调用,中文是乱码,求解
<form name="f1">
<input type="text" name="t1" onkeyup="document.f1.t2.value=document.f1.t1.value" />
<input type="text" name="t2" />
</form>
</body>
<input type="text" name="t1" onKeyUp ="document.f1.t2.value=document.f1.t1.value" />
<input type="text" name="t2" />
</form>
开始我们js线程队列为空
当我们点击一个按键的时候触发里面的方法"document.f1.t2.value=document.f1.t1.value",我们定义为t1,
队列就push了t1,当t1进入队列后,渲染线程t2才形成并进入队列,因此在执行t1的时候,t2还没执行,所以document.f1.t2.value还是之前的状态,就导致了为什么会慢一拍的效果,
而楼主说加上setTimeout就可以,onkeydown="setTimeout(function(){document.f1.t2.value=document.f1.t1.value},0)"
是因为setTimeout会将函数放到队列的末尾执行,无论定时的毫秒数是多少都一样,所以这里面设置为0或者其他都没关系
而用onkeyup没问题的原因是当点击按键会先触发onkeydown,所以渲染线程t2会在onkeyup=""前面执行,。。因此document.f1.t2.value已经是最新的状态了