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判斷語句,判斷太多會不會也有負面影響


來自有點自卑的碼農的文章,但願能利人又利己!

相關文章
相關標籤/搜索