天天看點

文本框輸入文字倒計代碼執行個體

文本框輸入文字倒計代碼執行個體:

通常情況下,文本框輸入的文字個數并不是無限制的,一般都會限定一個輸入最高上限,較為人性化的網站可能會有可輸入字數倒計效果,比如還剩餘20可以輸入這樣的提示,下面就通過一個執行個體介紹一下如何實作此效果。

代碼如下:

<!DOCTYPE html>

<html>

<head>

<meta charset=" utf-8">

<meta name="author" content="http://www.softwhy.com/" />

<title>文本框輸入文字倒計效果代碼-螞蟻部落</title>

<style type="text/css">

*

{

  margin:0;

  padding:0;

}

.box

{

  width:500px;

  margin:10px auto;

}  

p span

{

  color:#069;

  font-weight:bold;

}  

textarea

{

  width:300px;

}

.textColor

{

  background-color:#0C9;

}  

.grey

{

  padding:5px;

  color:#FFF;

  background-color:#CCCCCC;

}

</style>

<script type="text/javascript" src="http://www.softwhy.com/mytest/jQuery/jquery-1.8.3.js"></script>

<script type="text/javascript">

$(function(){

  var $tex=$(".tex");

  var $but=$(".but");

  var ie=jQuery.support.htmlSerialize;

  var str=0;

  var abcnum=0;

  var maxNum=280;

  var texts=0;

  $tex.val("");

  $tex.focus(function(){

    if($tex.val()=="")

    {

      $("p").html("您還可以輸入的字數<span>140</span>");

    }  

  })

  $tex.blur(function(){

    if($tex.val() == "")

    {

      $("p").html("請在下面輸入您的文字:");

    }  

  })

  if(ie)

  {

     $tex[0].oninput = changeNum;

  }

  else

  {

     $tex[0].onpropertychange  = changeNum;

  }

  function changeNum()

  {

    //漢字的個數

    str=($tex.val().replace(/\w/g,"")).length;

    //非漢字的個數

    abcnum=$tex.val().length-str;

    total=str*2+abcnum;

    if(str*2+abcnum<maxNum||str*2+abcnum==maxNum)

    {

      $but.removeClass()

      $but.addClass("but");

      texts=Math.ceil((maxNum-(str*2+abcnum))/2);

      $("p").html("您還可以輸入的字數<span>"+texts+"</span>").children().css({"color":"blue"});

    }

    else if(str*2+abcnum>maxNum)

    {

      $but.removeClass("")

      $but.addClass("grey");

      texts =Math.ceil(((str*2+abcnum)-maxNum)/2);

      $("p").html("您輸入的字數超過了<span>"+texts+"</span>").children("span").css({"color":"red"});

    }  

  }

})

</script>

</head>

<body>

<div class="box">

  <p>請在下面輸入您的文字:</p>

  <textarea name="weibao" class="tex" cols="" rows="8"></textarea>

</div>

</body>

</html>

一.實作原理:

首 先設定了一個最大可以輸入的文字數量。在代碼中規定一個漢字相當于兩個英文字元長度,并且為textarea文本框注冊oninput和 onpropertychange事件處理函數,這兩個事件的作用是一樣的都可以檢測文本框中内容的改變,一旦内容發生改變就會觸發這兩個事件,之是以是 兩個事件,是為了浏覽器相容性問題。事件處理函數可以檢測目前文本框中字元的長度,并給出相應的提示,這裡不多介紹了,具體可以看代碼注釋。

二.代碼注釋:

1.$(function(){}),當文檔結構加載完畢再去執行函數中的代碼,是$(document).ready(function(){})的簡寫。

2.var $tex=$(".tex"),取得class屬性值為.tex的jquery對象集合。

3.var ie=jQuery.support.htmlSerialize,用來進行浏覽器相容,在IE下傳回值為false,其他浏覽器為true。

4.var str=0,聲明一個變量,并将指派為0,在後面會用到。

5.var abcnum=0,聲明一個變量,并将指派為0,在後面會用到。

6.var maxNum=280,規定可以輸入内容的最大長度,注意這裡長度時指英文字元的長度。

7.var texts=0,聲明一個變量,并将指派為0,在後面會用到。

8.$tex.val(""),将textarea文本框中的内容清空。

9.$tex.focus(function(){}),為文本框注冊focus事件處理函數。

10.if($tex.val()==""){$("p").html("您還可以輸入的字數<span>140</span>");} ,如果文本框中的内容為空,那麼僵p中的文本設定為"您還可以輸入的字數140",注意140個是指的漢字的個數,一個漢字占占兩個位元組,一個英文字元占一個位元組。

11.$tex.blur(function(){}),為文本框注冊blur事件處理函數。

12.if($tex.val() == ""){$("p").html("請在下面輸入您的文字:");},當文本框失去焦點的時候,會将p元素的文本設定為"請在下面輸入您的文字:"。

13.if(ie),如果是非IE浏覽器。

14.$tex[0].οninput=changeNum,$tex[0]可以将jquery元素轉換DOM元素。為文本框的oninput事件注冊事件處理函數。

15.else{$tex[0].onpropertychange=changeNum;},如果是IE浏覽器,則為文本框的onpropertychange事件注冊事件處理函數。

16.function changeNum(){},此函數是oninput事件和onpropertychange事件的處理函數,用來處理輸入文本倒計問題。

17.str=($tex.val().replace(/\w/g,"")).length,可以計算出輸入漢字的個數。

18.abcnum=$tex.val().length-str,可以計算出輸入内容除漢字外其他字元的個數。

19.total=str*2+abcnum,一個漢字相當于2個英文字元,這樣就換算成英文字元的長度。

20.if(str*2+abcnum<maxNum||str*2+abcnum==maxNum),判斷目前輸入的長度是否小于等于規定的最大長度。

21.texts=Math.ceil((maxNum-(str*2+abcnum))/2),計算出還可以輸入漢字的數量。

22.$("p").html("您還可以輸入的字數<span>"+texts+"</span>").children().css({"color":"blue"}),設定p元素中的文本内容,并設定文本的顔色。

23.else if(str*2+abcnum>maxNum),如果超過規定長度。

24.texts=Math.ceil(((str*2+abcnum)-maxNum)/2),計算出超出的個數。

25.$("p").html("您輸入的字數超過了<span>"+texts+"</span>").children("span").css({"color":"red"}),設定p元素中文本内容,并設定文本的顔色。

轉載于:https://www.cnblogs.com/momox/p/5090746.html

繼續閱讀