一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

最經(jīng)典的實(shí)現(xiàn)字符數(shù)控制的方案哦!(完善版)

 duduwolf 2005-09-17
最經(jīng)典的實(shí)現(xiàn)字符數(shù)控制的方案
當(dāng)我們?cè)贏SP.NET開(kāi)發(fā)時(shí),經(jīng)常會(huì)遇到一個(gè)頭疼的問(wèn)題:字符數(shù)的控制
 由于數(shù)據(jù)庫(kù)的字段長(zhǎng)度是固定的,因此在進(jìn)行字符輸入時(shí),最關(guān)鍵的就是控制字符的個(gè)數(shù)不能超過(guò)字段的長(zhǎng)度,要不然,一個(gè)個(gè)異常會(huì)讓人瘋掉的。
  對(duì)于單行文本框,不管是HTML控件還是Web控件,我們經(jīng)常會(huì)使用MaxLength來(lái)控制,但這種控制無(wú)法控制到中文字符,即MaxLength=50的控制,可以輸入50個(gè)英文與50個(gè)中文,這樣的話,還是會(huì)導(dǎo)致中文字符數(shù)的溢出。
  對(duì)于多行文本框,那就更慘了,使用MaxLenth根本不起作用的。

下面提供的方案優(yōu)勢(shì):
  1)最佳的方法是在文本框中輸入時(shí),控制到最大字?jǐn)?shù),超過(guò)時(shí)不能進(jìn)行輸入;

  2)對(duì)于粘帖的情況也要能兼容,以前網(wǎng)上的方法不能控制到paste的情況;

  3)對(duì)于最后的一個(gè)中文字符,寧愿舍去也不能多一個(gè)字符,比如50的字符數(shù),在第49個(gè)時(shí),最后輸入一個(gè)中文,會(huì)導(dǎo)致最終字?jǐn)?shù)為51,而這種情況,推薦是不能輸入中文,保證最終的字符數(shù)<=50最佳,因?yàn)榉艞壱粋€(gè)中文字符總比數(shù)據(jù)庫(kù)報(bào)錯(cuò)要好吧。
 4)為了提高開(kāi)發(fā)效率,盡可能的減少代碼量,此方案不需要為文本框添加任何事件,而是由腳本塊自己解決,因此只需要把腳本塊飲包含到頁(yè)面中就可以了,這應(yīng)該是相當(dāng)方便了吧 
 
完善版修改:由于前一個(gè)方案中,一些輸入法無(wú)法激活onpress事件,導(dǎo)致對(duì)于中文的不支持,現(xiàn)在采用onkeyup事件處理,在處理方式上也進(jìn)行了修改,原來(lái)的onpress事件是進(jìn)行輸入控制,而onkeyup只能對(duì)已經(jīng)輸入后的字?jǐn)?shù)進(jìn)行字?jǐn)?shù)判斷,過(guò)長(zhǎng)的進(jìn)行截短處理。

  在原方案中,有位朋友指出:數(shù)據(jù)采用n(type)系統(tǒng)不會(huì)報(bào)錯(cuò),是的,如果采用n(type)的話,是以字符為基礎(chǔ)的,可以不考慮數(shù)據(jù)庫(kù)出錯(cuò)的可能性,但同樣也存在一個(gè)界面顯示的問(wèn)題,比如界面上的Address值,希望是100個(gè)字符,如果不進(jìn)行中英文字?jǐn)?shù)區(qū)分,最多將輸入100個(gè)中文,從而占200個(gè)字節(jié)空間,導(dǎo)致Adress在顯示時(shí)會(huì)超過(guò)預(yù)料的空間,界面搞得不易控制。因此,此方案還是有可取之處的。
具體新方案實(shí)現(xiàn):
 1)將以下的代碼包含到頁(yè)面中:

<script language="javascript"> 
<!-- 

String.prototype.len
=function(){ 
return this.replace(/[^\x00-\xff]/g,"**").length; 


//Set maxlength for multiline TextBox 
function setMaxLength(object,length) 
{
    
    
var result = true
    
var controlid = document.selection.createRange().parentElement().id; 
    
var controlValue = document.selection.createRange().text; 
    
var tempString=object.value;
    
    
var tt=""
    
for(var i=0;i<length;i++
        { 
            
if(tt.len()<length) 
                tt
=tempString.substr(0,i+1); 
            
else 
                
break
        } 
    
if(tt.len()>length)
        tt
=tt.substr(0,tt.length-1);
    object.value
=tt;
    
    


//Check maxlength for multiline TextBox when paste 
function limitPaste(object,length) 

        
var tempLength = 0
        
if(document.selection) 
        { 
            
if(document.selection.createRange().parentElement().id == object.id) 
            { 
                tempLength 
= document.selection.createRange().text.len(); 
            } 
        } 
        
var tempValue = window.clipboardData.getData("Text"); 
        tempLength 
= object.value.len() + tempValue.len() - tempLength; 

        
if (tempLength > length) 
        { 
            tempLength 
-= length; 
            
var tt=""
            
for(var i=0;i<tempValue.len()-tempLength;i++
                { 
                    
if(tt.len()<(tempValue.len()-tempLength)) 
                        tt
=tempValue.substr(0,i+1); 
                    
else 
                        
break
                } 
            
if(tt.len()<=0)
            {    
                window.event.returnValue
=false;
                
            }
            
else
            {
                tempValue
=tt; 
                window.clipboardData.setData(
"Text", tempValue); 
                window.event.returnValue 
= true
            }
        } 
    



function PressLength()
{
    
    
if(event.srcElement.type=="text" || event.srcElement.type=="textarea" )
    {
        
if(event.srcElement.length!=null)
            setMaxLength(event.srcElement,event.srcElement.length);
        
    }
}

function LimitLength()
{

    
if(event.srcElement.type=="text" || event.srcElement.type=="textarea" )
    {
        
if(event.srcElement.length!=null)
            limitPaste(event.srcElement,event.srcElement.length);
    }
}
document.documentElement.attachEvent(‘onkeyup‘, PressLength); 
document.documentElement.attachEvent(‘onpaste‘, LimitLength);

//--> 
        </script>


2)在需要控制的控件上添加length="n"(n為要控制的字?jǐn)?shù))即可,如:
 
<INPUT  type="text" length="3">
<TEXTAREA length="20"  rows="2" cols="20"></TEXTAREA>
<asp:TextBox id="TextBox1"  runat="server" length="7"></asp:TextBox>
<asp:TextBox id="TextBox2" runat="server" TextMode="MultiLine" length="10"></asp:TextBox>
上面是HTML控件與Web控件的例子,只要加一個(gè)length就可以了。

 好了,大家可以體驗(yàn)一下了哦:http://www.cnblogs.com/Files/tintown/stringLenth3.rar (已經(jīng)修改復(fù)了“沒(méi)有l(wèi)ength無(wú)法輸入的問(wèn)題”)

個(gè)人建議:1)可以把這個(gè)腳本塊放在js文件中,進(jìn)行引用即可
                2)可以把腳本放在BasePage中,這樣每個(gè)頁(yè)面都可以使用了
               3)可以使用這些腳本塊,開(kāi)發(fā)專門的服務(wù)器端控件,我沒(méi)有時(shí)間開(kāi)發(fā),如果有朋友可以開(kāi)發(fā)了發(fā)布一下哦!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    色综合久久中文综合网| 日韩欧美国产高清在线| 欧美精品激情视频一区| 成人日韩在线播放视频| 免费大片黄在线观看日本| 九九热精彩视频在线免费| 国产免费成人激情视频| 亚洲熟妇熟女久久精品| 国产日韩欧美专区一区| 亚洲精品国产精品日韩| 五月婷婷六月丁香在线观看 | 国产成人免费激情视频| 亚洲精品成人午夜久久| 国产国产精品精品在线| 五月天丁香亚洲综合网| 99久久精品一区二区国产| 在线免费不卡亚洲国产| 欧美日韩国产福利在线观看| 亚洲国产欧美久久精品| 欧美日韩乱码一区二区三区| 国产精品久久精品毛片| 久久热中文字幕在线视频| 国内外免费在线激情视频| 日韩精品免费一区三区| 色偷偷亚洲女人天堂观看| 人妻少妇av中文字幕乱码高清| 果冻传媒精选麻豆白晶晶 | 日韩精品免费一区二区三区| 亚洲熟女乱色一区二区三区| 欧美多人疯狂性战派对| 国产精品推荐在线一区| 亚洲天堂有码中文字幕视频| 日本人妻的诱惑在线观看| 精品亚洲香蕉久久综合网| 五月天丁香亚洲综合网| 日韩在线中文字幕不卡| 国产成人午夜在线视频| 麻豆欧美精品国产综合久久| 国产精品免费无遮挡不卡视频| 欧美黑人精品一区二区在线| 亚洲综合香蕉在线视频|