【发布时间】:2014-08-28 04:06:50
【问题描述】:
对不起,我不太擅长 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>
【问题讨论】:
-
使用检查
keyCode = 13的keyup处理程序。 -
有时从头开始编写比阅读别人的代码更容易;) 请在下面查看我的答案,如果您觉得它有用,请告诉我。
-
你为什么要重新发明轮子
getElementsByClassName?支持 IE
标签: javascript textbox double-click textchanged