在输入字段中选择一些文本,但不是全部,当它被聚焦时
Select some text in an input field, but not all, when it is focused
如果我有一个像<input type="text" name="summary" value="Summary: This is a test.">
这样的文本字段,是否有可能使它这样,当用户单击该字段时,或使用Tab键到达它,而不是选择所有文本,只有一部分被选中?
在本例中,我希望选择This is a test
部分,以便用户可以立即开始输入以替换为他们想要的内容。
这是可能的JavaScript,如果有必要,某种类型的黑客使其工作?
不幸的是,在这种情况下,我的其他选择非常有限;通常,替代方法是将Summary:
放在文本框之外,例如,这样它就不能被编辑了。
是的,这是可能的…这里我有一个例子,选择你的字段文本的一部分…
$.fn.selectRange = function(start, end) {
return this.each(function() {
if (this.setSelectionRange) {
this.focus();
this.setSelectionRange(start, end);
} else if (this.createTextRange) {
var range = this.createTextRange();
range.collapse(true);
range.moveEnd('character', end);
range.moveStart('character', start);
range.select();
}
});
};
$('input').selectRange(6,15);
http://jsfiddle.net/WpqsN/1972/所以你可以这样使用:
$('input').click(function(){
$('input').selectRange(6,15);
});
或
$('input').one('click',function(){
$('input').selectRange(6,15);
});
只在第一次运行,点击
好的-这将尝试在<input>
的值中创建一个"不可编辑"的字段名。它尝试但没有完全成功的原因是因为它实际上是可编辑的,但如果用户更改了字段名,它会尝试恢复值并恢复字段名。
Javascript:
var Fields = {
Seperator:":"
}
Fields.copyFieldName = function (element) {
if (element.dataset.fieldname) {
var seperatorIndex = Fields.findSeperator(element);
if (element.value.substring(0, seperatorIndex) !== element.dataset.fieldname) {
var oldValue = element.value.substring(seperatorIndex + 1, element.value.length)
element.value = element.dataset.fieldname + Fields.Seperator + oldValue;
}
}
};
Fields.findSeperator = function (element) {
return element.value.indexOf(Fields.Seperator);
};
Fields.selectInputValue = function (element) {
if (element.type === "text") {
if (element.setSelectionRange) {
element.setSelectionRange(
Fields.findSeperator(element) + 1,
element.value.length
);
} else if (element.createTextRange) {
var range = element.createTextRange();
range.moveStart("character", Fields.findSeperator(element) + 1);
range.moveEnd("character", element.value.length);
range.select();
}
}
};
$(document).ready(function () {
$("input[data-fieldname]").each(function (index, element) {
Fields.copyFieldName(element);
$(element).click(function () {
Fields.copyFieldName(element);
Fields.selectInputValue(this);
});
$(element).focusin(function (e) {
e.preventDefault();
Fields.copyFieldName(element);
Fields.selectInputValue(this);
});
});
});
和HTML:
<input type="text" name="extra1" value="an extra field" />
<input type="text" name="summary" value="this is a test" data-fieldname="Summary" />
<input type="text" name="extra2" value="an extra field" />
请注意,我对您的字段示例做了一个小修改。我使用data-*
属性来存储字段的名称。
这里有一个小提琴:http://jsfiddle.net/tFRD4/4/
希望这对你有帮助!
相关文章:
- 将事件聚焦/模糊在可编辑内容的元素上
- jQuery自动完成阻止选择后聚焦
- JavaScript-切换“;全部检查”;复选框true/false
- 使用向下箭头键(与tab键一样)聚焦下一个输入
- 当没有文本输入聚焦时检测空格键按下
- 如何移除或改进:在Bootstrap Carousel上聚焦风格
- 如何在悬停和聚焦时打开引导导航菜单
- Express.js和multer:如何知道文件何时全部上传
- 可以't滚动后聚焦输入
- 复选框“全部”不适用于Jquery DataTable 1.10.5版本
- 如何在angular bootstrap ui中聚焦活动导航选项卡中的拳头输入字段
- 无法使用 $('input[name=“rate”]').focus() 聚焦文本框;方法
- 全部/无复选框
- 当在输入框中聚焦时,清除页面上的所有间隔
- 有没有一种方法可以在所有嵌套循环之后放置一个标签,以便在一步中将它们全部打断
- 为什么只有最后一项显示,而不是全部显示
- 更改当前网页上显示的部分(即不是全部)文本
- notify.js没有'如果另一个窗口被聚焦,则不显示通知
- 不允许输入或聚焦的输入类型文本
- 在输入字段中选择一些文本,但不是全部,当它被聚焦时