我正在尝试使用Javascript在文本框的开头创建一个包含一些只读文本的文本框,然后允许在只读文本后面进行编辑。我怎么能在Javascript / jquery中做到这一点?
答案 0 :(得分:19)
这是一次尝试:
var readOnlyLength = $('#field').val().length;
$('#output').text(readOnlyLength);
$('#field').on('keypress, keydown', function(event) {
var $field = $(this);
$('#output').text(event.which + '-' + this.selectionStart);
if ((event.which != 37 && (event.which != 39)) &&
((this.selectionStart < readOnlyLength) ||
((this.selectionStart == readOnlyLength) && (event.which == 8)))) {
return false;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<input id="field" type="text" value="CAN'T TOUCH THIS!" size="50" />
<div id="output">
</div>
这将禁用只读部分的左右箭头以外的键。它还会在只读部分的末尾禁用退格键。
根据我的阅读,这不适用于IE&lt; = 8。
这里是普通的JavaScript(没有JQuery):
function makeInitialTextReadOnly(input) {
var readOnlyLength = input.value.length;
field.addEventListener('keydown', function(event) {
var which = event.which;
if (((which == 8) && (input.selectionStart <= readOnlyLength)) ||
((which == 46) && (input.selectionStart < readOnlyLength))) {
event.preventDefault();
}
});
field.addEventListener('keypress', function(event) {
var which = event.which;
if ((event.which != 0) && (input.selectionStart < readOnlyLength)) {
event.preventDefault();
}
});
}
makeInitialTextReadOnly(document.getElementById('field'));
<input id="field" type="text" value="CAN'T TOUCH THIS!" size="50" />
答案 1 :(得分:2)
这里有一些想法
HTML
<input type="text" id='myinput' value ="my text">
jquery的
var orginal_text = $('#myinput').val();
var regular_expression = '/^' + orginal_text +'/' ;
$('#myinput').keyup(function(){
var current_text = $('#myinput').val();
if(current_text.match('^' + orginal_text +'') == null){
$('#myinput').val(orginal_text + ' ' +current_text )
}
})
HTML
<input type="text" id='my_sticky_text' value ="my text" readonly='readonly'>
<input type="text" id='myinput' value ="my text">
CSS
#my_sticky_text{
position:absolute;
left : 0px;
}
#myinput{
position:absolute;
left : 50px;
border-left:none;
}
HTML
<input type="text" id='my_sticky_text' value ="my text" readonly='readonly'>
<input type="text" id='myinput' value ="my text">
<br>
<hr>
<button id='getval'>get value</button>
CSS
#my_sticky_text{
position:absolute;
left : 0px;
}
#myinput{
position:absolute;
left : 50px;
border-left:none;
}
jquery的
$('#getval').click(function(){
var sticky_text = $('#my_sticky_text').val();
var user_text = $('#myinput').val();
alert (sticky_text + ' ' + user_text)
})
我们从这一切中得到了什么?!简单地说,你不能以一种很好的方式完成你想要的东西......我无法想象我想要这样做的情况。
1 - 在文本字段标签中放置常量文本。
2 - 当用户提交表单时捕获文本字段的值并将文本添加到其中。
3-向用户添加一条帮助说明,该输入应如下所示(例如:mytext-yourtext)
答案 2 :(得分:1)
以下是John S关于防止剪切/粘贴操作(例如通过右键单击)的答案的修改版本:
function makeInitialTextReadOnly(input) {
var readOnlyLength = input.value.length;
input.addEventListener('keydown', function(event) {
var which = event.which;
if (((which == 8) && (input.selectionStart <= readOnlyLength))
|| ((which == 46) && (input.selectionStart < readOnlyLength))) {
event.preventDefault();
}
});
input.addEventListener('keypress', function(event) {
var which = event.which;
if ((event.which != 0) && (input.selectionStart < readOnlyLength)) {
event.preventDefault();
}
});
input.addEventListener('cut', function(event) {
if (input.selectionStart < readOnlyLength) {
event.preventDefault();
}
});
input.addEventListener('paste', function(event) {
if (input.selectionStart < readOnlyLength) {
event.preventDefault();
}
});
}
makeInitialTextReadOnly(document.getElementById('field'));