时间:2021-07-01 10:21:17 帮助过:13人阅读
//enter发送
function IsEnter(evt)
{
if(window.event.keyCode ==13)
{
send();
return false;
}
}
//ctrl+enter发送
function IsEnterAndCtrl()
{
if(window.event.keyCode ==13 && window.event.ctrlKey)
{
send();
return false;
}
}
然后我就用文本框的onkeydown事件来调用这两个函数,可以一直效果不出来,我就调试,发现event永远都是undefined,我无语了,然后我就换方法了,我把onkeydown函数里面加了一个event参数,在IsEnter(evt)里面也定义了一下var obj = window.event ? evt.keyCode : evt.which;//window.event是针对IE,evt.keyCode是针对FF,这样这个问题就解决了,就不会出现undefined错误了。
接下来问题又来了,我发现onkeydown事件只要你按键盘上的任意键就会触发这个事件,那么就无法实现ctrl和enter同时按了,又是一个纠结的问题啊,还有我们有onkeydown事件就有onkeyup事件,接下来我就把onkeydown事件换成了onkeyup事件了,这样问题就解决了。
好了,问题是越解决越少了,下面要做到是如何做到enter与ctrl+enter切换实现是换行还是发送消息?为了兼容性,我又定义了一个变量 var e = evt || window.event;我就是通过obj与e来实现换行与发送切换的,详细js代码如下:
代码如下:
//enter or ctrl+enter发送
function IsEnter(evt)
{
var obj = window.event ? evt.keyCode : evt.which;
var e = evt || window.event;
var type = document.getElementById("sendtype");
var txt = document.getElementById("txtcontent");
if(type.innerHTML=="[Enter发送消息]")
{
if(obj ==13 && !(e.ctrlKey))
{
send();
e.returnValue = false;
txt.value="";
return false;
}
if(e.ctrlKey && e.keyCode==13)
{
txt.value +="\n";
}
}
else
{
if(e.ctrlKey && e.keyCode==13)
{
send();
return false;
}
}
}
注意:以上代码我都已经在IE6、IE8、FF里测试过,绝对有用,由于按enter发送消息的时候会与换行冲突,所以我用e.returnValue = false;txt.value="";不知道有没有更好的方法?