Я надеюсь создать веб-приложение, это означает, что элементы HTML должны быть довольно динамичными, поскольку они будут создаваться и перемещаться вокруг того, что обрабатываются другими другими элементами. Поэтому я решил использовать классы - с большим успехом, до момента обработки событий. Это подозрительный класс, который говорит о том, что Chrome говорит, что он путает его с переменной, которая не определена.Переменные класса не видны внутри события элемента?
function SpanInputPair(element) {
span = document.createElement("span");
this.Span = getNextInputID();
span.style.display = "none";
span.id = this.Span;
element.appendChild(span);
input = document.createElement("input");
input.type = "text";
this.Input = getNextInputID(); // request a new ID for this element and save into this class
input.id = this.Input; // Attach it onto the element for future finding :/ (slow)
element.appendChild(input);
input.focus();
span.onclick = function() {
var input = getInput(this.Input); // this.Input cannot be seen?
var span = getInput(this.Span);
input.value = span.innerHTML;
toggleDisplay(input);
toggleDisplay(span);
input.focus();
}
input.onblur...
Строка «var input = getInput (this.Input);» проблема в том, что Chrome говорит мне, что больше не видит «this.Input». Я знаю это, потому что я могу запустить эту строку и заменить «this.Input» на реальное значение, и он возвращает элемент в порядке. Как вы можете видеть, у меня есть динамическое создание текстового поля и диапазона и установка их идентификаторов для использования в будущем, потому что я ранее пытался сохранить сам элемент в классе и использовать его внутри события - такую же проблему, поэтому я попытался чтобы найти его в документе каждое событие, используя document.getElementByID(). Странно также не кажется, что он фокусирует только что созданное текстовое поле (если это может быть частью проблемы тоже, я не знаю). Этот проект был создан полностью из ничего и не использует библиотеки. Итак, мой вопрос: можете ли вы объяснить, почему событие элемента не может видеть какие-либо переменные в классе, который его создал? И как я могу это исправить?
Я еще не видел, как это было опубликовано, так как многие люди используют библиотеку, такую как JQuery и/или не используют классы, является вопросом, связанным с обработкой событий с помощью внутренних переменных класса.
Значение 'this' будет элементом' span', а не 'window'. –
Правда, это была большая ошибка. Спасибо – albertoblaz
Спасибо за подробное объяснение того, как функции создают свое собственное «это», это имеет смысл, поскольку я использую функции как классы в первую очередь. Однако теперь элементы span и input, хранящиеся в этом классе, перезаписываются каждым новым экземпляром SpanInputPair, что приводит к тому, что вход и диапазон не основаны на экземплярах. Не означает ли это, что мне НЕОБХОДИМО использовать «это»? –