textarea标签按下Ctrl+Enter实现换行

这是我第一次写文章(处女做),写得很差的地方别客气直接指出来。谢谢!!!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。


学习到的思路:

遇到困难或者不懂的地方不要没有头绪的尝试,查查资料借鉴经验(多问),但也别照搬应该先理解做者的思路,再把这个思路用到本身的项目进行修改,改为知足本身项目需求的代码!


在下有问题请教你们:

  1. 我用到了原生JavaScript的BOM方法获取元素节点,又在jQuery的监听事件里使用,这样的操做有没有什么负面影响。
  2. 在这23行代码里(算有是有23行吧)用到了4次if判断语句,判断太多会不会也有负面影响


来自有点自卑的码农的文章,但愿能利人又利己!

相关文章
相关标签/搜索