不怕不知道,就怕不知道——js转义问题

碰到一个比较变态的需求,由于前台产品显示的需要,后台录入的时候,需要注意很多点,比如这里要输入的标点符号必须是全角的,那里输入的标点符号必须是半角的。


如果是你拿到这种需求,你会怎么办呢?


这种东西,网上资料还是很多的,不过几乎所有的都不能直接解决你的问题。我在做这个需求的时候,一看是的想法是:用户输入错误时,给他一个提示。


这样问题来了,用户不断的输入,不断的弹出alert(),体验是很不友好的。


然后我就采取了第二种方案,用户输入过程中有误时,我就在文本框后面加一个<span>提示框。提示用户输入错误,不过这个会改变后台输入页面的样式。还要麻烦前端大哥该页面,所以直接采用了第三种方式。


第三种方式很简单,就是在用户输入时,自动修正。



需求要求:A【id为A】文本框输入的所有标点,必须为全角;B【id为B】文本框输入的所有标点必须为半角。

我在实现的过程中,遇到了一个问题:自动校为半角时能够全部成功(全角转半角);而半角转全角时,却一直失败!
弄了老半天,才解决问题。解决的过程其实很奇葩,当我看到mybatis的xml里面的<![CDATA[]>的时候,我才意识到,可能是js转义的问题。
想了一想,为什么弄了老半天才解决问题呢?
还是自己JS这一块儿的知识比较欠缺呀。

下面,贴出代码,给大家晒一晒:


$(function(){
	$("form :input.required").each(function(){
        var $required = $("<strong class='high'> *</strong>"); //创建元素
        $(this).parent().append($required); //然后将它追加到文档中
    }); 
	
	$("form :input").blur(function(){
		var $parent = $(this).parent();
		$parent.find(".formtips").remove();
		
		if($(this).is("#A")){
			if(this.value.length>16){
				var errorMsg ='不能超过16个字!'; 
				$parent.append('<span class="formtips onError">'+errorMsg+'</span>');
			}
			
			if($("#A").val().length>0){//半角转全角
				$("#A").val($("#A").val().replace(/\?/g,'\?').replace(/\</g,'《').replace(/\>/g,'》')
.replace(/'/g,'\‘').replace(/'/g,'\’').replace(/,/g,',').replace(/\./g,'。').replace(/\;/g,';'));
			}
		}
		
		if($(this).is("#B")){
			if(this.value.length>12){
				var errorMsg ='不能超过12个字!'; 
				$parent.append('<span class="formtips onError">'+errorMsg+'</span>');
			}
			if($("#B").val().length>0){//全角转半角
				$("#B").val($("#B").val().replace(/,/g,',').replace(/‘/g,'\'').replace(/’/g,'\'')
.replace(/;/g,';').replace(/。/g,'.').replace(/《/g,'<').replace(/》/g,'>').replace(/?/g,'?'));
			} 
		}
		
	}).keyup(function(){
		$(this).triggerHandler("blur");
	}).focus(function(){
		$(this).triggerHandler("blur");
	});
})



如上代码:标点半角转全角,需要转义。至于原因,在JS里面"."代表的是匹配所有字符。所以我将输入的内容replace时,它会将所有字符匹配为"。"。

其他的,大家可以自己查一下,了解一下就可以。


PS:学了一段时间JQuery了,终于有点感觉了~~~


功能有大小,尽善尽美是标准。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。