#javascript #html
#javascript #HTML
Вопрос:
Я генерирую поля ввода динамически, надеясь проанализировать любой текст, введенный в поле, и обработать его в keydownFunc позже. После ключевого события текст в DOM недоступен.
Вот мой код:
for (i = 1; i < 7; i ) {
var element = document.createElement("input");
element.setAttribute("style", "width:33px;");
element.setAttribute("name", i);
element.setAttribute("onkeydown", "keydownFunc(event);");
var tempID = document.getElementById(i)
tempID.appendChild(element);
}
function keydownFunc(event) {
var x = event.keyCode;
if (x == 13 | x == 9) {
path = event.path[1].id
console.log(path);
// process input
}
}
<table id="table">
<tbody>
<td id="1"></td>
<td id="2"></td>
<td id="3"></td>
<td id="4"></td>
<td id="5"></td>
<td id="6"></td>
</tbody>
</table>
Комментарии:
1. Код, который вы написали здесь, работает для меня. Есть ли что-то еще, что вы пытаетесь сделать?
Ответ №1:
Вам следует избегать назначения обработчиков событий с использованием on...
атрибутов. Вы должны использовать addEventListener
вместо:
element.addEventListener("keydown", keydownFunc);
Также path
является довольно неясным и не стандартным свойством объекта Event. К чему вы пытаетесь получить доступ? Если это сам ввод, то используйте event.target
(например event.target.value
, чтобы получить его значение), или если вы хотите получить ячейку таблицы, то используйте event.target.parentNode
.
Комментарии:
1. event.target.value сделал свое дело. Пожалуйста, прокомментируйте, почему я должен избегать назначения on .. attributes, и если это связано со стандартными методами или потому, что в конечном итоге это может вызвать некоторые проблемы с кодом, спасибо
2. Оба. Это стандартная практика, и это может привести к проблемам. An
on...
может содержать только один обработчик, поэтому он может быть случайно перезаписан другим скриптом. Это не может произойти сaddEventListener
.
Ответ №2:
Я не совсем уверен, в чем заключается ваш вопрос, но я думаю, вы хотите получить доступ к тексту, который кто-то ввел в текстовое поле, и что-то с ним сделать. Вы можете получить доступ к этому внутри вашего keydownFunc
as
event.path[0].value
Здесь event.path[0]
будет элемент ввода.
Кстати, вам не нужно называть входной элемент, если вы не используете имя для чего-то другого.