可输入div(模拟input输入)

<div  contenteditable="true"></div>

div输入框有一个好处是div高度随输入内容自动伸缩,可以看见所有输入内容,而textarea和input只显示内容的一部分,输入前截图:

输入后截图:

下面是一个div编辑实例:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
        <title>瑞途ERP R8</title>
        <script src="js/jquery-1.11.3.min.js"></script>
        <style>
            .editor{
                display:inline-block;
                padding:5px;
                height:20px;
                font-size:14px;
                /*-webkit-user-modify:read-write;*/
            }
            .placeholder:after{
                content:‘请输入点什么吧~~‘;
                color:#999;
            }
            select{
                border:none;
                appearance: none;
                -moz-appearance: none;
                -webkit-appearance: none;
                background: url("http://ourjs.github.io/static/2015/arrow.png") no-repeat scroll right center transparent;

            }
            .item{
                /*width:100px;*/
                background:#ebf9ff;
                cursor: pointer;
                font-size:14px;
                display:inline-block;
                margin:10px 5px;
                padding:5px;
            }
            .remove{
                color:#bdf;
                display:inline-block;
                text-align: center;
                font-size:12px;
                margin-left:5px;
            }
            .tip-box{
                margin:-50px 50px 50px 50px;
                width:400px;
                border-left:1px solid #ddd;
                border-right:1px solid #ddd;
                box-shadow: 0px 2px 5px rgba(0,0,0,.2);
            }
            .tip li{
                padding:5px 10px;
                border-bottom:1px solid #ddd;
            }
            .selected{
                background:#eee;
            }
            .container{
                margin:50px;
                width:400px;
                border:1px solid green;
            }
        </style>
    </head>
    <body>

        <div id="container" class="container">

            <div class="item" >
                <select name="" id="">
                    <option value="">3晚</option>
                    <option value="">4天5晚</option>
                    <option value="">1晚</option>
                </select>
                北京<span class="remove">X</span>
            </div>
            <div class="item">
                <select name="" id="">
                    <option value="">3晚</option>
                    <option value="">4天5晚</option>
                    <option value="">1晚</option>
                </select>
                天津<span class="remove">X</span>
            </div>

            <div id="editor" class="editor" contenteditable></div>

        </div>

        <div class="tip-box">
            <ul class="tip">

            </ul>
        </div>

        <script>
            function content(ele){
                var html="";
                html+=‘<div class="item"><select name="" id=""><option value="">3晚</option><option value="">4天5晚</option>‘
                    +‘<option value="">1晚</option></select>‘+ele+‘<span class="remove">X</span></div>‘;
                return html;
            }

        var lastEditRange;
        $(‘#container‘).click(function(e){
            $(‘#editor‘).trigger(‘focus‘);
        })
        $(‘#editor‘).click(function(){

        })
        $(‘select‘).click(function(e){e.stopPropagation();})
        $(‘#container‘).on(‘click‘,‘.item select‘,function(e){e.stopPropagation();})

        var arr=["澳门","澳门2","澳门3","澳门4",‘奥克兰‘,‘澳洲‘,‘巴厘岛‘,‘巴黎1‘,‘巴黎2‘,‘巴黎3‘,‘巴黎4‘,‘巴塞罗那‘,‘巴西利亚‘];
        $(‘.remove‘).on(‘click‘,function(){$(this).parent().remove();})
        $(document).on(‘click‘,‘.item .remove‘,function(){$(this).parent().remove();})
        var tipList=$(‘.tip‘);

        $(‘#editor‘).keyup(function(e){keyupFn(e);})

        var currentSelection=-1;
        $(‘#editor‘).keydown(function(e){keydownFn(e);})
        function keyupFn(e){
            if(e.which!=8&&e.which!=13&&e.which!=27&& e.which != 38 && e.which != 40){
                var valText=$.trim($(‘#editor‘).text());
                if(valText==""){
                    return;
                }else{
                    tipList.empty();
                    for(var i=0;i<arr.length;i++){
                        if(arr[i].match(valText)){
                            var element=$(‘<li></li>‘).html(arr[i])
                            .click(function(){
                                $(‘#editor‘).before(content($(this).html()));
                                $(‘#editor‘).empty();
                                tipList.empty();
                            }).mouseenter(function(){
                                $(this).addClass(‘selected‘);
                            }).mouseleave(function(){
                                $(this).removeClass(‘selected‘);
                            })
                        tipList.append(element);
                        }
                    }
                }
            }
            console.log(valText);
        }
        function keydownFn(e){
            switch(e.which){
                case 38://up arrow
                    e.preventDefault();
                    $(‘ul.tip li‘).removeClass(‘selected‘);
                    if((currentSelection - 1) >= 0){
                        currentSelection--;
                        $( "ul.tip li:eq(" + currentSelection + ")" )
                            .addClass(‘selected‘);
                    } else {
                        currentSelection = -1;
                    }
                break;
                case 40://down arrow
                    e.preventDefault();
                    if((currentSelection+1)<$(‘ul.tip li‘).length){
                        $(‘ul.tip li‘).removeClass(‘selected‘);
                        currentSelection++;
                        console.log(currentSelection);
                        $(‘ul.tip li‘).eq(currentSelection).addClass(‘selected‘);
                    }
                break;
                case 13://enter
                    e.preventDefault();
                    if(currentSelection>-1){
                        var text=$(‘ul.tip li‘).eq(currentSelection).html();
                        console.log(text);
                        $(‘#editor‘).before(content(text));
                        $(‘#editor‘).empty();

                    }
                    tipList.empty();
                    currentSelection=-1;
                break;
                case 27://esc
                     currentSelection=-1;
                     tipList.empty();
                     $(‘#editor‘).html("");
                break;
                case 8://backspace
                    if($(‘#editor‘).html()==""){

                        $(‘#container>.item:last‘).remove();
                        tipList.empty();
                    }
                    tipList.empty();
                break;
            }
        }
    </script>
    </body>
</html>

效果截图:

原文地址:https://www.cnblogs.com/wj19940520/p/10207166.html

时间: 2024-10-11 06:56:20

可输入div(模拟input输入)的相关文章

Python基础笔记:input()输入与数据类型转换

input就是个万能输入,不过input输入的元素都是以str形式保存的,如果要他作为一个整数的话,就需要进行数据类型转换. input的使用 name=input('please input your name :\n') print(name) please input your name : 152 365 152 365 #这是个字符串 name=input('please input your name :\n').split() print(name) please input yo

input输入什么div图层显示什么

<html> <meta charset="utf-8" /> <style > .ppp{ width:600px; height:300px; background-color:pink; } </style> <input type="text" id="ttt" name="" value=""  maxlength="" 

SendInput模拟键盘输入的问题

SendInput模拟键盘输入的问题 http://www.cnblogs.com/yedaoq/archive/2010/12/30/1922305.html 最近接触到这个函数,因此了解了一下,总结一下列在这. 我了解它的出发点是如何通过它向活动窗口输入字符,这是很多程序都有的功能(我猜Visual Assist X就用了这个功能). 根据MSDN,此函数模拟按键操作,将一些消息插入键盘或鼠标的输入流中,Windows对它进行处理,生成相应的WM_KEYDOWN或WM_KEYUP事件,这些事

移动端开发注册、登陆input常用事件(input输入文字触发事件)

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>移动端开发注册.登陆input常用事件(input输入文字触发事件)</title> <meta name="keywords" content="

jquery模拟可输入的下拉框

//页面html <div id="select" class="select" > <ul> <c:forEach items="${movieCityList}" var="cy" varStatus="st"> <li> <a href="javascript:void(0)" onclick="selectOptio

input框只能输入纯数字+格式化输入金额与银行卡JS代码

HTML页面代码示例: <div class="wrap">   <input type="text" id="bankCard" placeholder="输入银行卡号"> </div>   <div class="wrap">   <input type="text" id="moneyNum" placeho

VB模拟键盘输入的N种方法

VB模拟键盘输入的N种方法http://bbs.csdn.net/topics/90509805hd378发表于: 2006-12-24 14:35:39用VB模拟键盘事件的N种方法 键盘是我们使用计算机的一个很重要的输入设备了,即使在鼠标大行其道的今天,很多程序依然离不开键盘来操作.但是有时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样可以把很多重复性的键盘操作交给程序来模拟,省了很多精力,按键精灵就是这样的一个软件.那么我们怎样才能用VB来写一个程

解决input输入光标不一致粗细!

今天有人问了谷歌和火狐下input输入框中的光标大小显示不一致,之前都没遇到过这~把人家的解决方法转过来先~~~以前在项目里碰到过一个问题input输入框用一个背景图模拟,设置height和line-height一样的高度,使里面的输入文字能够居中, 在FF下出现的情况是:点击input时,输入光标其实上跟input的height一样高,但当开始输入文字时,光标又变得跟文字一样高, chrome下光标跟input的height一样高, 而IE下光标跟文字的大小一致. 一直没弄明白为什么这样子,今

正则表达式控制Input输入内容 ,js正则验证方法大全

https://blog.csdn.net/xushichang/article/details/4041507 正则表达式控制Input输入内容 2009年04月01日 17:15:00 阅读数:21747 不能输入中文 <input type="text" name="textfield"  onkeyup="this.value=this.value.replace(/[^/da-z_]/ig,'');"/>只能输入 数字和下划