Чтобы сделать текст «редактируемым», я написал функцию, которая заменяет текст элементом ввода (шаг 1), а затем (при изменении) заменяет текст значением элемента ввода (шаг 2).
это работает, за исключением следующего сценария: если элемент ввода активен (шаг 1 процедуры) и я нажимаю на элемент ввода, текст (в элементе ввода) заменяется на «неопределенный», и функция не работать нормально больше
<html>
<head>
<title>Test</title>
<script type="text/javascript">
<!--
// global variables for use in (out-of-function) listeners
var changeText_actual;
var changeText_parent;
function changeText(actual) {
// element representing a textNode
changeText_actual = actual;
// element containing the textNode
changeText_parent = actual.parentNode;
// create a new html-element to input text
var textfield = window.document.createElement("input"); {
textfield.setAttribute("type", "text");
// text in textNode
textfield.setAttribute("value", actual.data);
// listener for when user has finished input (e.g. by pressing return)
textfield.setAttribute("onchange",
// if inputText is not empty
"if(this.value && this.value.length > 0) {"
// fill textNode with inputText
+" changeText_actual.data = this.value;"
+"}"
// remove input-element and put textNode inplace
+"changeText_parent.replaceChild(changeText_actual, this);"
);
}
// remove textNode and put input-element inplace
changeText_parent.replaceChild(textfield, changeText_actual);
// select inputText for faster editing
textfield.select();
}
//-->
</script>
</head>
<body>
<table border="1"><tr>
<th>1. Text</th><th onclick="changeText(this.firstChild)">2. Text</th><th>3. Text</th>
</tr><tr>
<td>4. Text</td><td>5. Text</td><td>6. Text</td>
</tr></table>
</body>
</html>
Я просто ищу объяснение, а не решение, так как я чувствую себя способным обойти эту проблему, если я знаю, откуда берется «неопределенное» (и где я могу его поймать)
contentEditable
, например.<th contenteditable>lolwat</th>
- person Mathias Bynens   schedule 23.01.2012