<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>contenteditable</title>
<style>
body, p {
??? margin: 0;
??? padding: 0;
}
.layout-box {
??? padding: 10px;
??? width: 300px;
??? height: 36px;
??? margin: 50px auto;
??? background-color: green;
??? font-size: 0;
}
#signature,
.layout-box:before {
??? display: inline-block;
??? vertical-align: middle;
}
.layout-box:before {
??? content: '';
??? width: 0;
??? height: 100%;
??? overflow: hidden;???
}
#signature {
??? width: 100%;
??? max-height: 36px;
??? min-height: 18px;
??? line-height: 18px;
??? background-color: #FFF;
??? font-size: 12px;
??? color: #000;
??? word-break: break-all;
}
#signature:focus {
??? outline: none;
}
</style>
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<div class="layout-box">
??? <p id="signature">编辑个性签名</p>
</div>
<script>
/*
一、思路
1、单击元素时,使元素可以编辑,并获得焦点
2、按下键盘检测用户编辑元素中的文本
3、监听按下Enter键操作或离开可编辑元素焦点时,更新数据库
*/
$(function(){
??? // return obj { length: 字节长度, limitStr: 限定的字符串(字节长度小于等于intVal) }
??? function getStringByteInfo ( string, intVal ) {
??????? var str = $.trim(string) || '', length = str.length, len, reg, charStr, limitStr = '';
??????? if ( length > 0 ) {
??????????? len = 0;
??????????? reg = /[^\x00-\xff]/;? // 匹配双字节字符(包括汉字在内)
??????????? for ( var i = 0; i < length; i++) {
??????????????? charStr = str.charAt(i);
??????????????? if ( reg.test(charStr) ) {
??????????????????? len += 2;
??????????????? }
??????????????? else {
??????????????????? len ++;
??????????????? }
??????????????? if (len <= intVal) {
??????????????????? limitStr += str.charAt(i);
??????????????? }
??????????? }
??????? }
??????? return {
??????????? length: len || 0,
??????????? limitStr: limitStr || ''
??????? }
??? }
??? // 检测文本字节长度
??? function detectionLength ( jqObj ) {
??????? var $obj = jqObj || $(),
??????? str = $obj.text(),
??????? strObj = getStringByteInfo(str, 40);
??????? if (strObj.length > 40) {
??????????? alert('最多只能输入40字节');
??????????? $obj.text(strObj.limitStr);
??????? }
??? }
??? // 更新数据库
??? function saveSignature ( jqObj ) {
??????? var $obj = jqObj || $(),
??????? str = $.trim($obj.text()),
??????? url = 'xxx?signature' + encodeURIComponent(str); // 假设这是发送ajax请求的url
??????? if (str != '' && str != '编辑个性签名') {
??????????? $.ajax(url, {
??????????????? dataType: 'json',
??????????????? data: {},
??????????????? success: function(){
??????????????????? // do something
??????????????? },
??????????????? error: function(){},
??????????????? complete: function(){}
??????????? });
??????? }
??????? else {
??????????? $obj.text('编辑个性签名');
??????? }
??? }
??? // keyPress Liseners
??? // 监听Enter键
??? function enterLiseners ( jqObj, event ) {
??????? var $obj = jqObj || $(),
??????????? code = event.keyCode || event.which;
??????? if (code === 13) {
??????????? jqObj.removeAttr('contenteditable');
??????????? saveSignature(jqObj);
??????? }
??? }
??? $('#signature')
??? .bind('click', function(){
??????? $(this).attr('contenteditable', 'true').trigger('focus');
??? })
??? .bind('keydown', function(e){
??????? detectionLength($(this));
??????? enterLiseners($(this), e);? // 更新数据库
??? })
??? .bind('blur', function(){
??????? $(this).removeAttr('contenteditable');
??????? saveSignature($(this)); // 更新数据库
??? })
});
</script>
</body>
</html>
详细解决方案
JavaScript模拟QQ签字(HTML5 contenteditable属性)
热度:1524 发布时间:2013-11-09 17:06:41.0
相关解决方案
- javascript ie6兼容的有关问题
- javascript window open在ie中设立不起作用,求解决
- javascript 字符串拼接效率有关问题
- JavaScript 自动生成图片并合并有关问题
- 不走"<script type='text/javascript'>"标签咋回事
- <script type="javascript/text">的有关问题
- 用servlet+jsp+javascript+jdbc做个简单的办公自动化系统流程,该如何解决
- 怎么打开 javascript:SetData(2010,5,10)
- javaScript = == ===区别,该怎么解决
- javascript 怎么验证name=xx.xx的radio表单
- form action 和 javascript 的提交問題解决方法
- javascript,该怎么处理
- javascript,该如何处理
- javascript 选中文字 但是保存样式 标签
- 新人求问,J2EE方向,html,css,javascript,vml要学到什么程度?解决思路
- javascript 请求servlet兑现将函数中定义的变量作为参数
- javascript 不懂,该如何处理
- javascript 不懂解决方法
- JavaScript 大局函数求实例,高分求
- javaScript 里面 如何知道Object 对象的长度
- javascript 函数调用有什么有关问题,请
- javascript 中文本框中数字如何比较
- javascript IE通过,火狐,google浏览器不过解决思路
- javascript rsa加密/java使用Cipher.getInstance("RSA/ECB/PKCS1Padding")解密,该如何处理
- IE javascript start()函数解决方案
- 关于RTMP 播放器(DELPHI C# FLASH JAVASCRIPT)解决思路
- 求“HTML5”实现的图表/报表插件解决办法
- 求“HTML5”兑现的图表/报表插件
- HTML5 3D图,该怎么解决
- Chrome Javascript Click 事件,该如何解决