这个功能如果是用传统型的jquery来写都要花费很多时间才可以完成的案例,

亲测jquery配合bootstrap来写和bootstrap配合react.js来写,不知不觉中有点震惊。。。

jquery版本代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" href="./css/bootstrap.css">
<script src="./js/jq18m.js"></script>
<script src="./js/bootstrap.js"></script> </head>
<body>
<div class="container">
<br><br>
<div class="well">
<textarea class="form-control" rows="10"></textarea>
<br>
<span>150</span>
<button class="btn btn-default btn-primary pull-right" id="sub">OK</button>
<button class="btn btn-default pull-right" id="pic">Add Pic</button>
</div>
</div>
<script>
//$('#sub').attr('disabled',true);
$('#sub').prop('disabled',true);
$('textarea').on('input',function(){
//alert('test');
var len = $(this).val().length;
if(len>0){
$('#sub').prop('disabled',false); }else{
$('#sub').prop('disabled',true);
}
$('span').text(150 - len);
}); $('#pic').on('click',function(){
$(this).toggleClass('uppic');
var len = $('textarea').val().length;
if($(this).hasClass('uppic')){
$('span').text(150 - len - 24);
//已经upload了图片
$(this).text('√ upload_OK');
}else{
//还没upload图片
$(this).text('Add Pic');
$('span').text(150 - len);
} //判断下看下是否有内容
var lens = $('span').text();
if(lens< 150){
$('#sub').prop('disabled',false);
}else{
$('#sub').prop('disabled',true);
}
});
</script>
</body>
</html>

react.js版本如下:

<!DOCTYPE>
<html>
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="./css/bootstrap.css">
<script src="./js/jq11_1.js"></script>
<script src="./js/bootstrap.js"></script>
<script src="./js/react.js"></script>
<script src="./js/react-dom.js"></script>
<script src="./js/browser.min.js"></script>
<style>
*{ margin:0px; padding:0px;} </style>
</head>
<body>
<div id="dome" class="container"></div>
<div id="test"></div>
<script type="text/babel">
var Fix = React.createClass({
getInitialState:function(){
return{
text:'',//表示大文本域的内容
uploaded:false //表示是否上传图片,默认否
}
},
//计算剩余字数的方法
fontCount:function(){
//总数:150字
//要考虑text的长度和是否已经上传图片了
if(this.state.uploaded){
return 150 - 25 -this.state.text.length;
}else{
return 150 - this.state.text.length;
}
},
handleChange:function(e){
this.setState({
text:e.target.value
}); },
handleUpload:function(){
this.setState({
uploaded:!this.state.uploaded
});
},
render:function(){
return(
<div>
<br /><br />
<div className="well">
<textarea className="form-control" rows="10" onChange={this.handleChange} >
{this.props.text}</textarea>
<br />
<span>{this.fontCount()}</span>
<button className="btn btn-default btn-primary pull-right"
disabled={this.state.text.length== 0 && !this.state.uploaded}>OK</button>
<button className="btn btn-default pull-right" onClick={this.handleUpload}>
{this.state.uploaded ? "√ upload_OK":"Add Pic"}</button>
</div>
</div>
);
}
});
ReactDOM.render(
<Fix />,
document.getElementById('dome')
);
</script>
</body>
</html>

效果相同,但是代码量和逻辑处理react完胜。。。。。。。。。。。

夺命雷公狗-----React---21--小案例之心情留言板的更多相关文章

  1. 夺命雷公狗—angularjs—21—解决angularjs压缩问题

    我们在实际的开发中往往离不开js的代码压缩,因为这样可以减轻服务器的压力,是的的方法如下所示: <!DOCTYPE html> <html lang="en" n ...

  2. 夺命雷公狗-----React---12--添加类和样式

    <!DOCTYPE> <html> <head> <meta charset="utf-8"> <title></ ...

  3. 夺命雷公狗-----React---11--添加css样式的方法

    <!DOCTYPE> <html> <head> <meta charset="utf-8"> <title></ ...

  4. 夺命雷公狗-----React---10--组建嵌套进行数据遍历

    先写一个组建... 然后进行嵌套.. <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  5. 夺命雷公狗-----React---9--map数据的遍历

    比如我们要实现的是这种效果: 用这种方法来写,她只能写死在哪,没啥意思,所以我们定义一个数据,然后来测试下map方法对她遍历出来的数据 <!DOCTYPE html> <html l ...

  6. 夺命雷公狗-----React---8--react官方提供的组建实现双向绑定

    首先要引入她.. <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  7. 夺命雷公狗-----React---7--组建的状态props和state

    props:组建初始要渲染的数据,他是不可以改变的 state:组建状态发生改变,调用render重新渲染数据 我们来写一个例子: <!DOCTYPE html> <html lan ...

  8. 夺命雷公狗-----React---6--props多属性的传递

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 夺命雷公狗-----React---5--props对象的传递

    提示:props的值是不可以改变的... <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

随机推荐

  1. Shader实例:边缘发光和描边

    效果图: 1.边缘发光 思路:用视方向和法线方向点乘,模型越边缘的地方,它的法线和视方向越接近90度.点乘越接近0 那么用 1-减去上面点乘的结果,来作为颜色分量,来反映边缘颜色强弱. Shader ...

  2. UVa #11582 Colossal Fibonacci Numbers!

    巨大的斐波那契数 The i'th Fibonacci number f (i) is recursively defined in the following way: f (0) = 0 and  ...

  3. php文字、图片水印功能函数封装

    一直在做有关php文字图片上传方面的工作,所以把此功能函数整理了一次,现在分享给大家. <?php class image { var $g_img; var $g_w; var $g_h; v ...

  4. PHP的开发环境

    快速搭建工作环境,测试环境,开始PHP的编程之旅. liunx CentOS 6.4安装配置LAMP服务器(Apache+PHP5+MySQL) 准备篇: 1.配置防火墙,开启80端口.3306端口v ...

  5. 修改ie的默认值 为ie10

    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE10" />

  6. shFlags简介

    看到有脚本中使用了shFlags,于是google了一下,发现还是个挺方便的东西. https://github.com/kward/shflags/wiki/Documentation12x sha ...

  7. canvas中的rotate的使用方法

    今天在绘制一个足球滚动的时候,想使用rotate方法,之前看到这个方法的时候,并没有引起任何重视,无非就是和CSS3里的rotate一样的用么... 遗憾的是,事实并非如此,由于代码在公司,我也就不去 ...

  8. Docker compose学习笔记

    一.compose compose 作用 你的应用可能需要很多个服务,比如web服务,数据库服务,缓存服务等等.我们可以把这些服务放到单独的容器里面,如果手工去配置这些服务会有些麻烦,docker c ...

  9. ueditor编辑器使用

    下载ueditor1_4_3_3-gbk-asp 解压后重命名为ueditor上传至网站 在需要编辑器的位置增加asp代码: <td style="PADDING-LEFT: 10px ...

  10. hibernate学习(5)——多对多关系映射

    1.创建实体和映射 package com.alice.hibernate03.vo; import java.util.HashSet; import java.util.Set; public c ...