Javascript:如何实现;输入/返回键”;以保存值
Javascript: How to implement the "enter/return key" to save a value?
对不起,我对JS不是很好。
代码本质上是用户双击文本,出现文本框,更改文本并保存新值。但是,我希望用户也能够单击enter来保存新值。
此外,如果可能的话,要有一个专用的"保存"按钮来保存新值,并用"放弃"按钮来保留旧值。
此外,如果双击多次,文本将显示为"(input type="text")"。有没有办法去除它?
如果可以的话,请帮忙。
HTML+JS代码
<html>
<head>
<script type="text/javascript">
window.onload = function() {
var elements = getElementsByClassName('text-edit', '*', document);
for(var i = 0; i < elements.length; i++) {
elements[i].ondblclick = function() {
this.setAttribute('oldText', this.innerHTML); // not actually required. I use this just in case you want to cancel and set the original text back.
var textBox = document.createElement('INPUT');
textBox.setAttribute('type', 'text');
textBox.value = this.innerHTML;
textBox.onblur = function() {
var newValue = this.value;
this.parentNode.innerHTML = newValue;
}
this.innerHTML = '';
this.appendChild(textBox);
}
}(i);
}
function getElementsByClassName(className, tag, elm) {
var testClass = new RegExp("(^|''s)" + className + "(''s|$)");
var tag = tag || "*";
var elm = elm || document;
var elements = (tag == "*" && elm.all) ? elm.all : elm.getElementsByTagName(tag);
var returnElements = [];
var current;
var length = elements.length;
for(var i = 0; i < length; i++) {
current = elements[i];
if(testClass.test(current.className)) {
returnElements.push(current);
}
}
return returnElements;
}
</script>
</head>
<div><span class="text-edit">Some text</span></div>
</html>
下面的代码段允许您使用save
按钮或enter
键修改文本框的值,并使用cancel
按钮放弃任何更改。
<!-- HTML -->
<h1 id="editable">Lorem Ipsum</h1>
// JavaScript
window.onload = function(){
var h1 = document.getElementById('editable');
h1.onclick = function(){
var old = this;
var input = document.createElement("INPUT");
input.type = "text";
input.value = this.innerHTML;
input.onkeyup = function(e){
var code = (e.keyCode ? e.keyCode : e.which);
if(code == 13) {
old.innerHTML = input.value;
input.parentNode.replaceChild(old, input);
save.parentNode.removeChild(save);
cancel.parentNode.removeChild(cancel);
}
};
this.parentNode.replaceChild(input, this);
var save = document.createElement("INPUT");
save.type = "button";
save.value = "Save";
(function(old, input){
save.onclick = function(){
old.innerHTML = input.value;
input.parentNode.replaceChild(old, input);
this.parentNode.removeChild(this);
cancel.parentNode.removeChild(cancel);
};
})(old, input);
input.parentNode.insertBefore(save, input.nextSibling);
var cancel = document.createElement("INPUT");
cancel.type = "button";
cancel.value = "Cancel";
(function(old, input){
cancel.onclick = function(){
input.parentNode.replaceChild(old, input);
this.parentNode.removeChild(this);
save.parentNode.removeChild(save);
};
})(old, input);
input.parentNode.insertBefore(cancel, input.nextSibling);
};
};
工作jsBin
相关文章:
- 当使用ajax并将html数据保存为对象时,收听浏览器返回按钮.好的或坏的
- .value返回字符串,直到我将其保存到变量
- 在本地存储中保存并返回随机生成的字符串
- 我的函数不会返回要保存在数组中的对象
- 返回保存为javascript变量的html
- 保存通过Ajax返回的信息后出现$_POST错误
- 保存对“;contentEditable;部分返回到原始HTML文件
- 如何在循环中调用Promise函数并保存其返回值
- 将函数的值保存在返回随机值的变量中
- 保存模型返回错误
- 在浏览器返回/forwd 按钮单击时保存/恢复所有 JavaScript 变量
- 如何将从 JavaScript 返回的文本值保存到 Java 中的字符串变量
- 保存文本框数据并从本地存储返回 - angularJS -
- NodeJS + QUNIT:在测试中保存返回的异常
- 主干.js:保存方法始终返回错误回调
- 为什么我不能将返回的数组保存在另一个现有数组中
- 复选框,并尝试在用户返回时为用户保存所有复选框的状态
- 在操作方法中保存图像,然后将 URL 返回给客户端
- 解析云代码在保存后返回指针而不是对象
- 当我运行返回()时"":""Javascript中的语法,只有当我将文件保存为PHP