Событие для изменений текстовой области

У меня есть библиотека JavaScript, которая обновляет скрытое <textarea> Элемент HTML с некоторыми данными на основе некоторых вещей.

В моем (JavaScript) приложение я хотел бы знать, когда эти обновления происходят, не имея необходимость проходить существующий код библиотеки.

Я надеялся, что было событие для этого, но по-видимому нет.

Как я прислушался бы к изменениям текстовой области?

Изменения могут быть столь же простыми как document.getElementById("myTextarea").value = "hello";

РЕДАКТИРОВАНИЕ я буду использовать FireFox только, начиная с этого кода, только будет частью набора тестов, который я создаю.

5
задан Luca Matteis 15 January 2010 в 13:59
поделиться

5 ответов

Вы в основном необходимы для реализации своего собственного компаратора и использовать один из NSARRAY Сортировка методов (например, SORTEDARRAYUSINGINGSELOCTOR: )

-(NSComparisonResult)compare:(Student *)student {
  // sort by name
  int nameComp = [name compare:student.name];
  if (nameComp != NSOrderedSame) return nameComp;

  // reverse ordered as desired in the question
  if (grade > student.grade)
    return NSOrderedAscending;
  else if (grade == student.grade) // watchout here
    return NSOrderedSame;
  else
    return NSOrderedDescending;
}

NSArray *unsrtedArray = ...
NSArray *sortedArray = [unsortedArray sortedArrayUsingSelector:@selector(compare:)];
-121--3509672-

Если вы управляете упомянуть, что вы упоминаете библиотеку JavaScript, я бы сказал, что самый простой путь будет к вручную, срабатывает вручную событие . Изменить событие каждый раз, когда вы изменяете значение поля.

Я думаю, что это то, как это делается в jQuery: События / изменения В противном случае простой Document.getelementById ('mytextarea'). Onchange () может работать.

Если у вас есть много звонков, вы можете обернуть изменение значения, а запущение события в функцию изменения (ID, значение) .

Это требует, конечно, что вы можете изменить каждый экземпляр при изменении Textarea. Если это дано, это, вероятно, самый элегантный способ.

3
ответ дан 14 December 2019 в 13:36
поделиться

Я знаю, что это, вероятно, не то, что вы хотите услышать, но только IE, кажется, есть событие, которое может справиться с этим. Это событие OnPropertychange .

textArea.onpropertychange = function ()
{
    if (event.propertyName == "innerText")
        alert('innerText has changed.');
}

Если вам разрешено изменить код библиотеки, я бы сделал как упомянул Pekka, и настроить код, чтобы он загорелся событие изменений. Единственным реальным перекрестным браузером, которую вы могли бы сделать, это использовать таймер. Если вы используете достаточно низкий таймер частоты, он, вероятно, даже не будет заметным для конечного пользователя, который вы не используете событие.

2
ответ дан 14 December 2019 в 13:36
поделиться

В Firefox вы можете расширить значение Setter:

HTMLTextAreaElement.prototype.__defineSetter__("value", function(t) {
    alert('someone is setting the value of a textarea');
    return this.textContent = t;
});
2
ответ дан 14 December 2019 в 13:36
поделиться

Существует, конечно, неэлигантный и бесчестный и бесчестный способ достижения этого, установив таймер:

var oldVal, el;
function setTimer(){
    setTimeout(function(){
        if(el.value != oldVal){
            console.log('something happened');
            oldVal = el.value;
        }
        setTimer();
    }, 5000);
};

Это будет сравнивать ценность каждые пять секунд до значения пяти секунд назад.

1
ответ дан 14 December 2019 в 13:36
поделиться

Как именно вызывается код? Судя по трассировке стека, класс Java запускается с помощью метода handle с помощью scriptlets в JSP-файле (для точности используется inicio2.jsp ). После того, как класс Java записал отчет в OutputStream , JSP-файл продолжит вывод остатка самого файла (включая пробел!), что неявно вызовет getWriter () для записи его в ответ. Именно это может вызвать исключение IllegalStateException , с которым вы сталкиваетесь сейчас, когда getOutputStream () уже был вызван ранее в классе Java.

Хорошо, что код Java помещен в класс Java, но это не означает, что вы все еще можете использовать JSP для его вызова. JSP не должен содержать ни одной строки кода Java. Сам JSP является частью выходных данных технологии просмотра. Чтобы исправить все это, достаточно иметь класс действий Struts (или , , который можно вызвать с помощью HTML < форма > или < а > .

-121--4817925-

Если вы не можете применить правило к каждому языку, обычно стараются обойти сложные лингвистические вопросы. Необходимо учитывать не только число и его порядковый номер, но и контекст, в котором оно появляется, и даже то, как положение в предложении может повлиять на перевод.

Вместо того, чтобы пытаться написать «1-е место» , такой ресурс гораздо проще перевести:

#easyToTranslate_en.properties
label.position=Position: {0,number,integer}

В зависимости от того, что вы пытаетесь сделать, вы можете пойти на компромисс с таким решением:

#compromise_en.properties
label.position.first=1st place
label.position.second=2nd place
label.position.third=3rd place
label.position.default=Position: {0,number,integer}

Для этого потребуется, чтобы код, считывающий ресурс, выполнил кейс-тест, чтобы выбрать, какой ресурс загрузить.

-121--5044787-

События DOM не происходят, когда значение для узла устанавливается программным путем через node.value; Найдите документацию API в библиотеке JavaScript и проверьте, есть ли у них какой-либо механизм уведомления.

ОТРЕДАКТИРОВАНО: Firefox? О, отлично, тогда есть такая интересная функция, как часы. Он отслеживает изменения свойств. Для вас это означает, что когда библиотека изменяет свойство «value» текстовой области, вы получаете уведомление. Что еще приятнее, так это то, что вы даже можете контролировать значение, установленное для свойства. Смотрите в действии.

var textnode = document.createElement('textarea');
textnode.watch('value', function(attr, oldv, newv){
    alert(newv);
    return newv; // you have to return correct value back.
});

//and now trigger the change to see that this works.
textnode.value = 'Bla';

Может быть, это помогает?:)

1
ответ дан 14 December 2019 в 13:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: