удобный для батареи способ обнаружить, изменилось ли содержимое текстового поля - PullRequest
1 голос
/ 23 января 2012

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

Даже на моем настольном ПК я вижу, что IE или Firefox жуют нетривиальный процент CPU с 500-миллисекундным setInterval, работающим с относительно простым обработчиком, проверяющим несколько текстовых полей.Это нормально на настольном ПК, но на ноутбуках и мобильных устройствах это ухудшит время автономной работы.

Каков хороший способ использования jquery для минимизации использования ЦП, но при этом быстрое обновление в ответ на изменения (включая вставку буфера обмена, обновления ajax и т. Д., А не только нажатия клавиш) в текстовое поле?

Ответы [ 2 ]

4 голосов
/ 23 января 2012

onBlur - это когда вы отошли от объекта без необходимости его изменения.

onChange вызывается только после того, как вы отошли от объекта, для которого вы изменили значение.

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

Если это не происходит, то регулярное обновление одной переменной javascript может не потребовать столько вычислительной мощности, как вы говорите, ЕСЛИ ваш селектор вызывает нечетное поведение DOM.

Попробуйте это: сделать ссылку на элемент по id и сохранить эту ссылку в переменной js. Обновление и изменение другой переменной с помощью этой ссылки является тривиальной операцией.

2 голосов
/ 23 января 2012

Запустите проверку окна.setInterval (или setTimeout) на фокусе этого текстового поля и убейте его при размытии. Таким образом, вы не будете использовать процессор, если курсор не находится в текстовом поле.

...