jquery实现在光标位置(input、textarea)插入内容的方法
2024-10-17 10:38:37
通过扫码枪扫码、按钮点击事件在光标处插入文本,这是前台js常用的功能。但是在input输入框和textarea文本框定位光标,插入数据是有点不同的
首先最简单的,适用于input输入框的方法
HTML代码:
<input id="phone"/>
<button type="button" onclick="insertContent()">插入</button>
JS代码:
function insertContent() {
$("#phone").insertAtCaret("要插入的内容");
} (function($){
$.fn.extend({
insertAtCaret: function(myValue){
var $t=$(this)[0];
if (document.selection) {
this.focus();
sel = document.selection.createRange();
sel.text = myValue;
this.focus();
}
else
if ($t.selectionStart || $t.selectionStart == '0') {
var startPos = $t.selectionStart;
var endPos = $t.selectionEnd;
var scrollTop = $t.scrollTop;
$t.value = $t.value.substring(0, startPos) + myValue + $t.value.substring(endPos, $t.value.length);
this.focus();
$t.selectionStart = startPos + myValue.length;
$t.selectionEnd = startPos + myValue.length;
$t.scrollTop = scrollTop;
}
else {
this.value += myValue;
this.focus();
}
}
})
})(jQuery);
上面的方法并不适用于在textarea文本框中插入数据,如下方法可以解决这个问题:
HTML代码:
<textarea id="textarea" rows="10" cols="60" style="margin: 0px 0px 10px; width: 440px; height: 186px;"></textarea>
<button type="button" id="insert">插入</button>
JS代码:
$('#textarea').on('select',function () {
message.setCaret(this);
}).on('click',function () {
message.setCaret(this);
}).on('keyup',function () {
message.setCaret(this);
}); $('#insert').on('click',function () {
var textareaStr = $('#textarea').val();
message.insertAtCaret($('#textarea')[0],$("#nick").val());
}); var message = {
setCaret: function (textObj) {
if (textObj.createTextRange) {
textObj.caretPos = document.selection.createRange().duplicate();
}
}, insertAtCaret: function (textObj, textFeildValue) {
if (document.all) {
if (textObj.createTextRange && textObj.caretPos) {
var caretPos = textObj.caretPos;
caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? textFeildValue + ' ' : textFeildValue;
} else {
textObj.value = textFeildValue;
}
} else {
if (textObj.setSelectionRange) {
var rangeStart = textObj.selectionStart;
var rangeEnd = textObj.selectionEnd;
var tempStr1 = textObj.value.substring(0, rangeStart);
var tempStr2 = textObj.value.substring(rangeEnd);
textObj.value = tempStr1 + textFeildValue + tempStr2;
} else {
alert("This version of Mozilla based browser does not support setSelectionRange");
}
}
}
}
上面的方法对于input输入框同样适用。
最新文章
- tangram2.6(XE2)\framework框架加载包异常 调试的地方
- SVNServer迁移
- Node调试之道-----JSHint
- Linux下查看所有CPU核心使用率的方法
- 在DataList、Repeater的HeaderTemplate和FooterTemplate模板中寻找控件FindControl
- ubuntu系统安装flashplayer
- IIS6.0、IIS7中的站点、应用程序和虚拟目录详细介绍
- B - A + B Again
- iphone/ipad前端开发技巧
- quartz群调查调度机制和源代码分析
- form表单标签的enctype属性的作用
- 大型网站制作前端使用PHP后台逻辑用 Java
- Java中ArrayList,Vector,LinkedList,HashMap,HashTable,HashSet对比及总结
- 20162330 第三周 蓝墨云班课 泛型类-Bag 练习
- Go-day04
- android 生成、pull解析xml文件
- topcoder srm 690 div1 -3
- ie6遮罩层兼容 100%高度的实现
- 使用GPUImage渲染图片教程
- 铁乐学Python_day08_文件操作