datalist的下拉框输入和光标锁定

一、html5

<button class="btn btn-info " type="button" onclick="remarkList()">
 选择
</button>

input id="remark" class="form-control" type="text" list="remarklist" onclick="dealKeyup(this)">
<datalist id="remarklist" class="list">
</datalist>

二、js

    var dataMap = new Map();
    dataMap.set("type", "1");
    //Map转为Json的方法
    let obj= Object.create(null);
    for (let[k,v] of dataMap) {
        obj[k] = v;
    }
    
    function remarkList(){
    	//alert("处理进来");
    	$.ajax({
			url:BOMF.CONST.WEB_APP_NAME+"/rest/dscommon/RemarkTempletService/preRemarkAll",
			type:"post",
		    dataType:"json",
	        contentType : 'application/json;charset=utf-8',
			async: true,
			data:  JSON.stringify(obj),
			success:function(datas){
				if(datas=="{}"){
					alert('没有查到数据');
				}else{
					$("#remarklist").html("");
					$.each(datas,function(index,itme){ //index相当于下标,item相当于对象,data就是后台传回的一个对象
						//循环遍历数组数据
						var stam="<option value='"+datas[index]+"'>"+datas[index]+"</option>";
						$("#remarklist").append(stam);
						
					});
				}
			},
		});
    }
    
	// 获取光标位置
	function getCursortPosition(ctrl) {
		var CaretPos = 0; // IE Support
		if(document.selection) {
			ctrl.focus();
			var Sel = document.selection.createRange();
			Sel.moveStart('character', -ctrl.value.length);
			CaretPos = Sel.text.length;
		}
		// Firefox support
		else if(ctrl.selectionStart || ctrl.selectionStart == '0')
			CaretPos = ctrl.selectionStart;
		return(CaretPos);
	}
  	
	// 设置光标位置
	function setCaretPosition(ctrl, pos) {
		if(ctrl.setSelectionRange) {		// IE Support
			ctrl.focus();
			ctrl.setSelectionRange(pos, pos);
		}else if(ctrl.createTextRange) {	// Firefox support
			var range = ctrl.createTextRange();
			range.collapse(true);
			range.moveEnd('character', pos);
			range.moveStart('character', pos);
			range.select();
		}
		
	}
	// 光标定位函数
	window.dealKeyup = function (that) {
    	var str = $(that).val();
    	//字符串处理
    	if(str.indexOf("*") != -1){
    		str = str.replace(/\s{1,}/g, "");
    	}
    	str = str.replace(/\*{1,}/g, " ");
    	$("#remark").val(str)
    	//光标定位开始
		var input_val = str.split(' ')[0].length;//截取字符串的长度
		if(input_val != "") {
			setCaretPosition(that,input_val);//光标的定位
			return;
		}
		
	}

三、显示效果

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值