=波波日志 > JavaScript/Ajax > 求网页上文本框ctrl+z为什么无效2=

[转]求网页上文本框ctrl+z为什么无效2

例如 <input type=text onkeyup="bbb.value=this.value;"> <input type=text name=bbb>
第一个文本框就不能用ctrl+z进行撤消,而第二个文本框就可以正常进行撤消。正常来说文本框或textarea不加JS事件都能用ctrl+z进行撤消操作,但加了某些事件后就失效了,请教高手怎么在不取消JS事件的情况下让ctrl+z的撤消功能可操作?
 
 
 
问题点数:100 回复次数:29 显示所有回复显示星级回复显示楼主回复 修改 删除 举报 引用 回复  
 

 加为好友
发送私信
在线聊天
 showliz
清风
等级:
可用分等级:富农
总技术分:233
总技术分排名:54267

 发表于:2008-01-05 15:39:341楼 得分:0
试过用
<input type=text onkeyup="bbb.value=this.value;" onkeypress="if (event.ctrlKey && event.keyCode==90){document.execCommand('Undo')}">
但ctrl+z仍然是不起作用。
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 showbo
要学习了.....さようなら
等级:
可用分等级:富农
总技术分:43207
总技术分排名:210
3
3
 发表于:2008-01-05 15:52:492楼 得分:10
换个处理函数试试,可能是keyup,keydown和ctrl+z有冲突


HTML code<input type=text name=bbb>
<input type=text onblur="bbb.value=this.value">

 
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 showliz
清风
等级:
可用分等级:富农
总技术分:233
总技术分排名:54267

 发表于:2008-01-05 16:13:473楼 得分:0
谢谢showbo,虽然改变了原事件的效果,但还是给我提供了另一种解决思路,还是希望有不破坏原效果的解决问题。
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 showbo
要学习了.....さようなら
等级:
可用分等级:富农
总技术分:43207
总技术分排名:210
3
3
 发表于:2008-01-05 17:03:234楼 得分:0
经过实验,你原来的代码在ff下可以使用ctrl+z返回

但是在ie,事件onkeydown,onkeyup,onkeypress下没能响应ctrl键,其他键没问题.我想就是ie的一个小bug吧??


HTML code<script>
function KeyUp(e)
{
  e=e||event;
  alert(e.ctrlKey);
}
</script>
<input   type=text onkeydown="KeyUp(event)">

 
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 showliz
清风
等级:
可用分等级:富农
总技术分:233
总技术分排名:54267

 发表于:2008-01-05 17:26:145楼 得分:0
很感谢showbo的关注!
不知道是不是IE上的这些事件和ctrl+z撤消功能产生冲突造成的。
这问题困扰我有一段时间了,终使找不到好的解决办法。
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 toury
理上网来
等级:
可用分等级:中农
总技术分:11282
总技术分排名:1673
2
 发表于:2008-01-05 17:56:306楼 得分:0
input type=text <onkeyup="bbb.value=this.value;"> <input  type=text  name=bbb>
----------------------->
<input type=text onpropertychange="bbb.value=this.value;"> <input type=text name=bbb>

 
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 showliz
清风
等级:
可用分等级:富农
总技术分:233
总技术分排名:54267

 发表于:2008-01-05 18:01:107楼 得分:0
toury,您运用了不同的事件,原来效果是正常的,可ctrl+z的撤消仍然是操作无效啊。
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 showbo
要学习了.....さようなら
等级:
可用分等级:富农
总技术分:43207
总技术分排名:210
3
3
 发表于:2008-01-05 19:17:288楼 得分:0
ie对text输入根本就没响应ctrl键,就是你单按下ctrl时,alert(event.ctrlKey) 输出是false
汗.........
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 showliz
清风
等级:
可用分等级:富农
总技术分:233
总技术分排名:54267

 发表于:2008-01-05 19:27:059楼 得分:0
Toshowbo,可以实现啊。
<input type=text onkeydown="if (event.ctrlKey){alert(event.keyCode);}">
能输出ctrl的键值。
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 showliz
清风
等级:
可用分等级:富农
总技术分:233
总技术分排名:54267

 发表于:2008-01-07 09:38:2310楼 得分:0
自己顶一下!希望再有高手能帮忙解决。
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 showliz
清风
等级:
可用分等级:富农
总技术分:233
总技术分排名:54267

 发表于:2008-01-08 11:23:0811楼 得分:0
咋没人回应呢?我在网上查了很多相关的资料也没有找到解决办法,希望哪位能指点迷津。
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 showliz
清风
等级:
可用分等级:富农
总技术分:233
总技术分排名:54267

 发表于:2008-01-10 14:30:0512楼 得分:0
自己再顶一顶!!
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 JK_10000
JK
等级:
可用分等级:小地主
总技术分:30777
总技术分排名:308

 发表于:2008-01-29 11:07:0513楼 得分:80
以下代码来自JKValidation:
http://download.csdn.net/source/346399
\JKHtml\JKValidation\JKValidationDemo-SoftAlertWhenBlur.htm


<input  type=text  onblur="setTextInputValue(document.all.bbb,this.value);"> <input  type=text  name=bbb>

<script>
/**
* setTextInputValue
*/
function setTextInputValue(obj,value) // For IE: To keep Undo after change value.
{
if(obj.createTextRange) obj.createTextRange().text=value;
else obj.value=value;
}
</script>
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 JK_10000
JK
等级:
可用分等级:小地主
总技术分:30777
总技术分排名:308

 发表于:2008-01-29 11:11:4714楼 得分:0
难得楼主也认真关注页面input/textarea里的undo功能.

例如日历,网上所见的很多日历,一旦使用,就导致整个页面的undo功能无效
再如CSDN的回贴textarea区域,竟然连undo都不支持
都显得过于粗略,没有认真为用户着想.
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 JK_10000
JK
等级:
可用分等级:小地主
总技术分:30777
总技术分排名:308

 发表于:2008-01-29 11:14:0815楼 得分:0
想保持原效果可以用:

<input  type=text  onpropertychange="setTextInputValue(document.all.bbb,this.value);"> <input  type=text  name=bbb>

<script>
/**
* setTextInputValue
*/
function setTextInputValue(obj,value) // For IE: To keep Undo after change value.
{
if(obj.createTextRange) obj.createTextRange().text=value;
else obj.value=value;
}
</script>
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 dada20042030
其实回忆是一种痛苦
等级:
可用分等级:富农
总技术分:5066
总技术分排名:4301
2
 发表于:2008-01-29 14:44:5016楼 得分:0
纯粹路过
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 dh20156
风之石
等级:
可用分等级:中农
总技术分:37574
总技术分排名:241
 发表于:2008-01-29 17:30:5717楼 得分:0
学习! 
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 tantaiyizu
痴情客         www.scriptlover.com
等级:
可用分等级:富农
总技术分:23270
总技术分排名:486
2
 发表于:2008-01-29 21:54:1318楼 得分:0
学习!  
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 yousite1
hihi
等级:
可用分等级:富农
总技术分:3497
总技术分排名:5964

 发表于:2008-02-02 13:28:2919楼 得分:0
學習!
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 jiaxueq
住址:四川眉山XX县XX街X号 姓名:Loading...
等级:
可用分等级:富农
总技术分:4028
总技术分排名:5097

 发表于:2008-02-03 08:37:4220楼 得分:5
HTML code
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>新建网页</title>
<style type="text/css">
body{
    font-size:14px;
}
</style>
</head>
<body>
IE6下測式結果:<p>
請分別在下面輸入一些文字後,兩秒內 和 兩秒後 按Ctrl+Z;<p>
兩秒後賦值somestr:<input type=text onkeyup="window.setTimeout(function(){b1.value='somestr'},2000);"> <input type=text name=b1><p>
兩秒後賦一空值:<input type=text onkeyup="window.setTimeout(function(){b2.value=''},2000);"> <input type=text name=b2><p>
<p>會發現:
第一排輸入框,輸入內容後,在未給bbb賦值前(2秒內),按Ctrl+z是正常的,2秒後,給bbb賦值,無效了。<br>
第二排輸入框,輸入內容後,2秒前和2秒後ctrl+z都正常。<p>
估計是IE6一個BUG!
</body>
</html>

 

 
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 jiaxueq
住址:四川眉山XX县XX街X号 姓名:Loading...
等级:
可用分等级:富农
总技术分:4028
总技术分排名:5097

 发表于:2008-02-03 08:40:4221楼 得分:0
請單獨測式。

即打開頁面後,先測式第一排。

要測式第二排,請關閉網頁,重新打開。
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 yulu126
追梦
等级:
可用分等级:短工
总技术分:5
总技术分排名:247828

 发表于:2008-02-03 11:23:1322楼 得分:0
学习
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 JK_10000
JK
等级:
可用分等级:小地主
总技术分:30777
总技术分排名:308

 发表于:2008-02-03 13:15:3723楼 得分:0
20楼的代码,如果本身b2.value就是空,执行{b2.value=''}才不会破坏IE的undo
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 jiaxueq
住址:四川眉山XX县XX街X号 姓名:Loading...
等级:
可用分等级:富农
总技术分:4028
总技术分排名:5097

 发表于:2008-02-03 14:39:5324楼 得分:0
回樓上:是的。
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 wangwenjun69
汪文君
等级:
可用分等级:中农
总技术分:973
总技术分排名:19811

 发表于:2008-02-03 15:36:2125楼 得分:0
一般情况下不要把函数直接写在表单的内容里面可以试着这样做
<script language="javascript">
function function1()
{
var aaa1 = document.getElementById("aaa").value;
document.getElementById("bbb").value=aaa1;
}
</script>
<form action="##" method="post">
<input type="text" name="aaa" onchange="function1();">
<input type="text" name="bbb">
</form>
 
 
修改 删除 举报 引用 回复  
 
 加为好友
发送私信
在线聊天
 hsx85315
 
等级:
可用分等级:长工
总技术分:45
总技术分排名:132192

 发表于:2008-02-04 14:22:0126楼 得分:5
新手一个,不过我看到如下的文章:
http://www.blogjava.net/emu/archive/2005/09/28/14314.html

希望对你有点帮助。
 

类别:JavaScript/Ajax 作者:转载 日期:2009-07-01 【评论:0 阅读:】 
 
暂时没有评论!
发表留言
  • *昵称:
  • 头像:
  • 电子邮件: [留下您的邮件,方便管理员回复您。]
  • 个人网站: *验证码:
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载或引用的作品侵犯了您的权利,请通知我们,我们会及时删除!
Powered by showbo,G51人力资讯网桂ICP备05005887号