这是我第一次写文章(处女做),写得很差的地方别客气直接指出来。谢谢!!!javascript
背景交代:java
因项目要求要实现按下Ctrl+Enter换行。bash
看起来要求挺简单的,就是两个按钮按下实现换行。可是我第一次接触,个人第一想法是到百度搜索看有没有代码(菜得抠jio),还真找到了一点代码。学习
灵感来源:this
blog.csdn.net/qwh66/artic…,从吸收了经验(拷代码)
spa
代码:.net
吸收的代码:code
<script type="text/javascript">
var down=0; //设置全局变量down,用来记录ctrl是否被按下;
function enter()
{
if(event.keyCode==17)
{
down=1; //ctrl按下
}
if(event.keyCode==13)
{
if(down==1)
{
document.getElementById("contend").value+= '\n';
down=0; //换行后记得将全局变量置为1,不然enter将变成换行,失去发送功能
}else
{
document.getElementById("btn").click(); //执行按钮发送的功能
document.getElementById("contend").value="";
}
}
}
</script>
复制代码
本身的代码:cdn
var down = 0; // 设置全局变量down,用来记录ctrl是否被按下;
var messageText = document.getElementById('messageText');// 获取文本框节点
$(document).off('keydown','#messageText').on('keydown','#messageText',function(fn){// 键盘按下事件
if(fn.keyCode == 17){// 按下了Ctrl
down = 1;
}
if(fn.keyCode == 13){// 按下了Enter
if(down ==1){// 判断是否按下Ctrl
$(this).val($(this).val()+'\n');// 插入内容以及换行
var scrollTop = messageText.scrollHeight;// 获取滚动条高度
$(this).scrollTop(scrollTop);// 设置滚动条高度
$(document).off('keyup','#messageText').on('keyup','#messageText',function(fn){
if(fn.keyCode == 17){// 松开了了Ctrl
down = 0;// 重置全局变量down,Ctrl松开了
}
fn.stopPropagation();// 阻止冒泡
});
}else{
window.event.returnValue = false;// 暂时屏蔽回车
}
}
fn.stopPropagation();// 阻止冒泡
});
复制代码
对代码的理解:blog
若是按照第一份代码是能完成换行的,可是我的比较挑剔,不知足于单单的一个换行。
第二份代码(也就是本身的代码),要考虑到用户存在换多行的状况,若是换了多行有涉及到了高度始终不会改变的状况,还有就是一直按住了Ctrl键状况(目前就想到这两种状况),因此多了要怎么去获取滚动条的高度以及判断松开了Ctrl按钮重置了全局变量down。
学习到的思路:
遇到困难或者不懂的地方不要没有头绪的尝试,查查资料借鉴经验(多问),但也别照搬应该先理解做者的思路,再把这个思路用到本身的项目进行修改,改为知足本身项目需求的代码!
在下有问题请教你们:
来自有点自卑的码农的文章,但愿能利人又利己!