当前位置:  编程技术>WEB前端
本页文章导读:
    ▪Jquery 仿新浪微博获取文本框能输入的字数      limit.js代码 //txt:文本框jquery对象 //limit:限制的字数 //isbyte:true:视limit为字节数;false:视limit为字符数 //cb:回调函数,参数为可输入的字数  function InitLimit(txt,limit,isbyte,cb){ txt.keyup(function(){ .........
    ▪文件上传工具      今天用PHP做了个文件上传工具,功能还是很完善滴,如下: 每个图片上传之后,都有自己的地址,改变原图位置或重命名时,将不会重复上传。 一、功能: A:文件分类上传 B:生成相应的.........
    ▪struts静态动态ActionForm使用(二)—验证              这篇博客主要介绍使用struts框架常用的验证方式。     第一种:重写ActionForm的validate方法。        在actionForm中需要验证的都是表单的验证而非.........

[1]Jquery 仿新浪微博获取文本框能输入的字数
    来源: 互联网  发布时间: 2013-11-06
limit.js代码
//txt:文本框jquery对象
//limit:限制的字数
//isbyte:true:视limit为字节数;false:视limit为字符数
//cb:回调函数,参数为可输入的字数
 function InitLimit(txt,limit,isbyte,cb){
	txt.keyup(function(){
		var str=txt.val();
		var charLen;
		var byteLen=0;
		if(isbyte){//原文博客:blog.csdn.net/bluceyoung
			for(var i=0;i<str.length;i++){
				if(str.charCodeAt(i)>255){
					byteLen+=2;
				}else{
					byteLen++;
				}
			}
			charLen = Math.floor((limit-byteLen)/2);
		}else{
			byteLen=str.length;
			charLen=limit-byteLen;
		}
		cb(charLen);
	});	
}

页面代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">  
  
<head>  
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />  
<script src=/blog_article/"http_/code.jquery.com/jquery-1.8.2.min.js" type="text/javascript">  
</script>  
  
<script type="text/javascript" src=/blog_article/"limit.js"></script>/index.html
<script type="text/javascript">  
$(document).ready(function(){  
  InitLimit($("#txt"),10,true,function(c){
  if(c>=0){
  	$("#show").val("还能输入"+c+"个字");
  	}else{
  		$("#show").val("已经超过"+(-c)+"个字");
  	}
  });    
  
InitLimit($("#txt1"),10,true,function(c){
  if(c>=0){
  	$("#show1").val("还能输入"+c+"个字");
  	}else{
  		$("#show1").val("已经超过"+(-c)+"个字");
  	}
  });       
});  
</script>  
</head>  
  
<body>  
<input type="text" id="txt"/><input id="show" type="text"/><br/>
<input type="text" id="txt1"/><input id="show1" type="text"/>

</body>  
</html>  

效果图:


作者:bluceyoung 发表于2013-2-19 11:46:36 原文链接
阅读:0 评论:0 查看评论

    
[2]文件上传工具
    来源: 互联网  发布时间: 2013-11-06

今天用PHP做了个文件上传工具,功能还是很完善滴,如下:

每个图片上传之后,都有自己的地址,改变原图位置或重命名时,将不会重复上传。

一、功能:

A:文件分类上传

B:生成相应的文件夹,如本例,选择团,生成文件夹tuan

C:点击图片,查看详细

二、HTML代码:

	<div id="container">
		<fieldset>
			<legend class="img"><img width="100%" src=/blog_article/"css/logo.png /></legend>
			<form action="" method="post" name="myform" id="myform" onsubmit="return false" enctype="multipart/form-data">
			    <strong>亲,请选择你要上传的文件</strong>
				<div class="file"><input type="file" id="fileToUpload" name="fileToUpload" /></div>
				<select id="product">
               		<option value="" <?php if(empty($pname)){ echo "selected" ;} ?> >请选择产品</option>
               		<option value="tuan" <?php if($pname == '2000tuan'){ echo "selected" ;} ?> >团</option>			
               	</select>
               	<button id="postBtn" >Submit</button>
			</form>
			<div id="info"></div>
			<div style="position:relative; top:40px; left:20px;">
				<a id="loading" style="display:none"><img width="10%" src=/blog_article/"css/loading.gif /></a>
			</div>
			<a href=/blog_article/"/index.html id="img_link" target="_blank">
				<div id="img_url">buding</div>
				<br/>
				<img class="preview" id="preview" src=/blog_article/""/index.html style="display:none;margin:0 auto" />
			</a>
		</fieldset>
	</div>

三、Javascript代码:

	<script type="text/javascript">
		$('#postBtn').click(function(){
			$('#preview').hide();
			$('#img_url').hide();
			$('#loading')
				.ajaxStart(function(){
					$(this).show();
				})
				.ajaxComplete(function(){
					$(this).hide();
				});
			if($('#fileToUpload').val() == ""){
				$('#info').html("亲,还没选择文件呢");
				var jObject={"Url":"","Height":413};
				var jString=JSON.stringify(jObject);
				window.parent.postMessage(jString,'*');
				return false;
			} 
			if($('#product').val() == ""){
				$('#info').html("亲,还没选择产品呢");
				$('#info').css("color","#e9af32");
				var jObject={"Url":"","Height":413};
				var jString=JSON.stringify(jObject);
				window.parent.postMessage(jString,'*');
				return false;
			} 
			var val = $('#product').val();
			$.ajaxFileUpload({	
				url:'ajaxupload.php',
				secureuri:false,
				fileElementId:'fileToUpload',
				dataType: 'text',
				data:{product:val},
				success: function (data, status)
				{
					if(data.search(/http:\/\//i) < 0 ){
						$('#info').html(data);
						var jObject={"Url":"","Height":413};
						var jString=JSON.stringify(jObject);
						window.parent.postMessage(jString,'*');
					}else{
						$('#info').html("您上传的文件为:<br/>");
						$('#preview').attr("src",data);
						$('#img_link').attr("href",data);
						$('#img_url').html(data);
						$('#preview').show();
						$('#img_url').show();
						$('#preview').load(function(){
							var imgH=$('#preview').height();
							var jObject={"Url":data,"Height":imgH+228,"oid":"<?php echo @$_REQUEST['oid']; ?>"};
							var jString=JSON.stringify(jObject);
							window.parent.postMessage(jString,'*');
						});
					}
				},
				error: function (data, status, e){	
					$('#info').html(data+e);
				}
			});
		});
	</script>

四、PHP代码

<?php
require_once('config.php');
if(empty($_FILES) || empty($_REQUEST)){
	header('location:imgupload.php');
	exit;
}

array_push($_FILES, $_REQUEST);

$filename = 'fileToUpload';
$product = @$_FILES[0]['product'];
$today = date("Y-m-d");
$time = date("YmdHis"); 
$year = date("Y");
$month = date("m");
$day = date("d");
$img_path = $product.'/'.$year.'/'.$month.'/'.$day.'/';
$destination_dir = ROOT_PATH.'/pic/'.$img_path.'/';

if(!is_uploaded_file($_FILES[$filename]['tmp_name'])){//验证上传文件是否存在
	echo "请选择你想要上传的图片";
	exit;
}
	
if($product == "") {//选择产品
   	echo "请选择产品";
	exit;
}
	$files = $_FILES[$filename];
   
	if($max_file_size < $files['size']){//判断文件是否超过限制大小
		echo "图片太大了,传个小点的吧(<=2MB)";
		exit;
	}
		
	if(!file_exists($destination_dir)) {//判断上传目录是否存在,不存在则创建一个.
		if(!mkdir($destination_dir,0777,true)) {
			echo "创建目录 {".$destination_dir."} 失败<可能是权限问题>";
			exit;
		}
	}
	$type = pathinfo($files['name']);
    $type = strtolower($type["extension"]);
	$type =".".$type;
	$tmp_name = $files['tmp_name'];
	$md5file = md5_file($tmp_name);//生成md5文件
	$new_name =$md5file.$type;
    $img_relat_path = $img_path.$new_name;
	$img_abs_path =	$destination_dir.$new_name;
		
    $url = IMG_URL.$img_relat_path;

    //判断数据库中图片是否存在
    $sql="select url from file_url where md5 = '".$md5file."'";
    $res=$db->getOne($sql);
    if($res) {
        echo $res['url'];
        exit; 
    }      
   
    if(!move_uploaded_file ($files['tmp_name'], $img_abs_path)) {//上传文件
        echo "上传文件失败";
			exit;
    }
        //将图片存入数据库       
    $sql="insert into file_url(/blog_article/url,product,md5,create_time/index.html) values('".$url."','".$product."','".$md5file."','".$today."')";
    $db->Execute($sql);
    $db->CloseDB();
    echo $url;
?>



作者:liushuwei0224 发表于2013-2-19 13:11:52 原文链接
阅读:13 评论:0 查看评论

    
[3]struts静态动态ActionForm使用(二)—验证
    来源: 互联网  发布时间: 2013-11-06
   
    这篇博客主要介绍使用struts框架常用的验证方式。

    第一种:重写ActionForm的validate方法。
  
    在actionForm中需要验证的都是表单的验证而非业务的验证。比如用户名非空,密码为数字,日期为时间格式等等。在validate方法中,返回ActionErrors信息,然后在错误页打印错误信息。
    
	public ActionErrors validate(ActionMapping mapping,
			HttpServletRequest request) {
	
	  ActionErrors errors=new ActionErrors();
	  if(username==null||"".equals(username)){
		 errors.add(username, new ActionMessage("error.username",username));
	  }
	  if(password==null || "".equals(password)){
		  errors.add("password",new ActionMessage("error.password",password));
	  }
	  if(!(birthday instanceof Date)){
		  errors.add("birthday",new ActionMessage("error.birthday",birthday));
	  }

	  return errors;
	}
         
      代码解释:
      使用这种ActionForm再带的验证方式,在配置文件中需要设置此action的validate属性为true,并且也要设置出现错误返回的错误页input属性。
      struts-config.xml中action的配置如下: 
	<action-mappings>
		<action path="/login" type="com.login.LoginAction" name="loginForm"
			scope="request" input="/login/error.jsp" validate="true">
			<forward name="success" path="/login/success.jsp"></forward>
			<forward name="false" path="/login/false.jsp"></forward>
		</action>
	</action-mappings>

     其中为了把错误显示出来,我们使用资源文件方式。
     在validate方法中,new ActionMessage("error.birthday",birthday)中的"error.birthday"是资源文件的key值。
     配置文件中加载资源文件: 
<!-- 	加载资源文件 -->
    <message-resources parameter="MessageResources" />
     注意资源文件放在src下。若是放在WebContent目录或web-inf下,则不会提示相应的错误信息。即使不报错。
     并且上述的日期,其中使用Register注册了,上篇博客已经介绍,在此不再过多介绍。
     这个action自带的验证的demo已经上传。点我下载。
    
     第二种:使用validator框架。
     其中validate验证,主要是由commons-validator.jar包。
     那如何使用validator框架呢?
     1.actionForm使用validator框架。
       首先:编写actionForm
       注意此时的actionForm不是继承ActionForm,而是继承ValidatorForm。
       其中actionform中只有getset方法
       其次:编写配置文件struts-config.xml中,加载验证插件以及使用资源文件。    
<!-- 	加载资源文件 -->
    <message-resources parameter="MessageResources" />
<!--     验证插件 -->
  <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property
        property="pathnames"
        value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
  </plug-in>
       其中,validator-rules.xml是公共的。而这个validation.xml是需要程序员编写。
      然后:编写validation.xml验证信息。  
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE form-validation PUBLIC
          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
          "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">

<form-validation>
    <formset>
<!--        form 的name必须与struts-config中名称一致 -->
        <form name="loginForm">
            <field property="username"  depends="required">
                   <!-- key值必须与资源文件中名称一致 -->
                    <arg key="error.username"/>
            </field>
    
            <field property="password" depends="required">
                    <arg key="error.password"/>
            </field>
            
            <field property="birthday" depends="date">
                 <arg key="error.birthday"/>
            </field>   
        </form>
    </formset>
</form-validation>
     formset可以包含多个form,并且form中需要验证的属性使用field标签。其中depends依赖验证规则的中的信息validator-rules.xml中的规则。比如:required,要求必填,date,日期格式,long,byte,mask正则等等。
     其中的key值必须与资源文件的key一致。如第一种方法。
    2.动态actionform使用validator框架。
     动态的actionform在上篇博客已经介绍。在1的基础上,只改一下struts-config.xml配置文件中的动态actionform 
<!-- 	动态验证form -->
    <form-beans>
      <form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorForm">
        <form-property name="username" type="java.lang.String"></form-property>
        <form-property name="password" type="java.lang.String"></form-property>
        <form-property name="birthday" type="java.util.Date"></form-property>
      
      </form-bean>
    </form-beans>
      其他的不用改变。
      但是需要注意的是:使用validator框架的动态actionform的type类型是:DynaValidatorForm而不是DynaActionForm
    3.应用在客户端,使用js提示。
      在1的基础上只改一个login.jsp其他的不用改。
      添加onsumit,并且添加个html:javascript标签    
<html:javascript formName="loginForm"/>
 <html:form action="login.do" onsubmit="return validateLoginForm(this)">
  	  username : <html:text property="username"/><br/>
 	  password : <html:password property="password"/><br>
 	  birthday: <html:text property="birthday"></html:text>
   <html:submit/>
  </html:form>
    需要注意的是:其中action不能使用"../",否则提示错误。
    并且并不是所有的服务器校验都可以转化成客户端的js提示,其中日期的合法性验证,就不能转化成客户端js提示。
   
 

    其中日期验证的测试  问题总结。
   上述的demo中测试日期,验证规则使用的date关键字
   1.因为默认的是java.sql.Date,若代码中使用的java.util.Date的类型,但是没有注册register,即使使用默认的yyyy-MM-dd格式,则也会报错。
      若是注册register,界面使用yyyy-MM-dd默认格式,则成功,如使用yyyy/MM/dd格式【自己手写的转换类的时间格式】,则提示validator验证失败。 
    2.若代码中使用的java.sql.Date类型。没有注册register,使用默认yyyy-MM-dd格式,则成功。界面输入yyyy/MM/dd格式,则不能验证,报错。
       若注册register,界面输入yyyy/MM/dd格式,也不能验证,报错。    
   3.如果birthday的验证规则是requried,date,则出现的现象是:若注册了,并且时间转换类中是yyyy/MM/dd格式,若界面输入yyyy/MM/dd格式,则validator验证的日期不一致。若输入其他的格式,比如yyyy-MM-dd格式,则提示requried
  
  
作者:llhhyy1989 发表于2013-2-19 14:22:14 原文链接
    
最新技术文章:
▪css white-space:nowrap属性用法(可以强制文字不...
▪IE里button设置border:none属性无效解决方法
▪border:none与border:0使用区别
▪html清除浮动的6种方法示例
▪三个不常见的 HTML5 实用新特性简介
▪css代码优化的12个技巧
▪低版本IE正常运行HTML5+CSS3网站的3种解决方案
▪CSS Hack大全-教你如何区分出IE6-IE10、FireFox、Chr...
▪ie6,ie7,ie8完美支持position:fixed的终极解决方案
▪小技巧处理div内容溢出
▪html小技巧之td,div标签里内容不换行
▪纯CSS实现鼠标放上去改变文字内容
▪li中插入img图片间有空隙的解决方案
▪CSS3中Transition属性详解以及示例分享
▪父div高度不能自适应子div高度的解决方案
▪告别AJAX实现无刷新提交表单
▪从零学CSS系列之文本属性
▪HTML 标签
▪CSS3+Js实现响应式导航条
▪CSS3实例分享之多重背景的实现(Multiple background...
▪用css截取字符的几种方法详解(css排版隐藏溢...
▪页面遮罩层,并且阻止页面body滚动。bootstrap...
▪CSS可以做的几个令你叹为观止的实例分享
▪详细分析css float 属性以及position:absolute 的区...
▪IE6/IE7/IE8/IE9中tbody的innerHTML不能赋值的完美解...
▪CSS小例子(只显示下划线的文本框,像文字一...
▪可以给img元素设置背景图
▪不通过JavaScript实现的自动滚动视差效果
▪div+CSS 兼容小摘
▪CSS的inherit与auto使用分析
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3