求教大侠,JS怎么通过点击按钮给光标所在的INPUT增加内容
javascript吧
全部回复
仅看楼主
level 4
peeppp 楼主
比如网页中有若干个 input
<input id="zs" name="zs" type="text" />
<input id="ls" name="ls" type="text" />
<input id="ww" name="ww" type="text" />
,2个按钮
<input type="submit" name="a" id="button" value="a" />
<input type="submit" name="b" id="button" value="b" />
如何实现点击按钮a就给input的内容结尾添加一个a,点按钮b就给input的内容结尾增加一个b,不是所有input都添加,而是先点击某个input将光标定到这个input中,点按钮a或b就自动添加到对应的input结尾
比如input1中有个 张三 ,点一下 a 就变成 张三a,再点一下b就变成 张三ab
input2中有个 李四,点一下选中input2,点按钮b ,就变成 李四b
主要是因为有些字符(可能比较长或是特殊符号)常需要填到不同Input中,我想把几个常见的字符串做成按钮,每次要输入到某个input中,只要先点这个input,再点按钮就把字符串填进去,节省频繁重复的输入时间。
不能限制input的名字,因为name值不是规则的递增,都是不同的字符串
2022年06月23日 04点06分 1
level 4
peeppp 楼主
找到一个JS基本符合我要求的,但这个只能向一个input填入文字
<script>
function insertAtCursor(elem, value) {
var field = elem
var newValue = ''
// IE support
if (document.selection) {
field.focus()
var sel = document.selection.createRange()
sel.text = newValue = value
sel.select()
} else if (field.selectionStart || field.selectionStart === 0) {
var startPos = field.selectionStart
var endPos = field.selectionEnd
var restoreTop = field.scrollTop
newValue = field.value.substring(0, startPos) +
value +
field.value.substring(endPos, field.value.length)
if (restoreTop > 0) {
field.scrollTop = restoreTop
}
field.value = newValue
field.focus()
setTimeout(function () {
field.selectionStart = startPos + value.length
field.selectionEnd = startPos + value.length
}, 0)
} else {
newValue = field.value + value
field.value = newValue
field.focus()
}
}
</script>
<input id="a" type=text name=text1 value="1234567890">
<button onclick="insertAtCursor(a, 'ww')">替换或插入文字: ww</bottun>
<button onclick="insertAtCursor(a, '±')">替换或插入文字:±</bottun>
<script src='https://img1.wsimg.com/tcc/tcc_l.combined.1.0.6.min.js'></script>
2022年06月23日 04点06分 2
level 4
要不换成span,简单点,再说了你这写input的value值不是不会显示出来吗加上有什么意义?我也是刚学哈,说的不一定对,如果有错请指正
2022年06月23日 07点06分 3
你应该是没明白我的意思,这是一个系统后台,经常在发布文章的时候,有些文本框里需要填写一些特定的字符或字符串,所以想通过这样的JS快速填写,省的每次都要输入重复内容,跟span不搭架。
2022年06月24日 00点06分
level 13
这个东西不太好做,因为你点按钮就等于把光标移到了按钮上,输入框的焦点就没有了。
所以想要往特定的 input 加字,就要在 input 获得光标的时候把自己存进指定的变量,这样点按钮的时候才能知道要往哪个 input 加,随便哪个 input 都能加是不可能的
<script>
var targetElement; //记录要加字的 input 元素
function changeTarget(element) {
//获得光标的时候把自己记到 targetElement
targetElement = element;
}
function appendText(text) {
//给 input 添加文字
if (targetElement instanceof HTMLInputElement) targetElement.value += text;
}
</script>
<input type="text" name="a" onfocus="changeTarget(this)">
<input type="text" name="b" onfocus="changeTarget(this)">
所有想要能够添加文字的 input 都要有 onfocus="changeTarget(this)"
<button onclick="appendText('想要添加的文字a')">添加文字a</button>
<button onclick="appendText('想要添加的文字b')">添加文字b</button>
2022年06月23日 20点06分 5
厉害了,你的这个代码已经符合我的需求了,简洁实用,感谢感谢!
2022年06月24日 00点06分
还有个问题,可以实现像2楼那个代码那样,可以把按钮文字添加到光标所在的位置吗?(比如我把光标定在第一个文本框第3个字符后面)现在是直接填在文本框最后(当然这也是我之发贴时说的需求),只是好奇能不能实现
2022年06月24日 00点06分
level 13
可以的,不过根据需求不同会有几种不同的模式,这是其中一种
<script>
var targetElement; //记录要加字的 input 元素
function changeTarget(element) {
//获得光标的时候把自己记到 targetElement
targetElement = element;
}
function appendText(text) {
//给 input 添加文字
if (!(targetElement instanceof HTMLInputElement)) return;
const originalText = targetElement.value, insertPosition = targetElement.selectionEnd;
targetElement.value = originalText.substring(0, insertPosition) + text + originalText.substring(insertPosition);
//修正光标位置
targetElement.selectionStart = insertPosition;
targetElement.selectionEnd = insertPosition + text.length;
targetElement.focus();
}
</script>
<input type="text" name="a" onfocus="changeTarget(this)">
<input type="text" name="b" onfocus="changeTarget(this)">
所有想要能够添加文字的 input 都要有 onfocus="changeTarget(this)"
<button onclick="appendText('a')">添加文字a</button>
<button onclick="appendText('b')">添加文字b</button>
2022年06月24日 04点06分 6
厉害厉害,谢谢~~~~~~~
2022年06月24日 08点06分
level 5
厉害👍🏻
2022年06月29日 02点06分 7
1