Основываясь на ответе Джейсона, вот функция, которая заменяет функцию «выбора» входных узлов DOM обновленной версией, в которую встроено время ожидания:
if (/chrome/i.test(navigator.userAgent)) {
HTMLInputElement.prototype.brokenSelectFunction =
HTMLInputElement.prototype.select;
HTMLInputElement.prototype.select = function() {
setTimeout(function(closureThis) { return function() {
closureThis.brokenSelectFunction();
}; }(this), 10);
};
}
По сути, (только в Chrome) мы просто переименовали встроенную, но неработающую функцию select () в brokenSelectFunction (), а затем добавили новую функцию ко всем входам, которая называется select () и которая вызывает brokenSelectFunction () после задержки. Теперь просто вызовите select () как обычно, поскольку встроенная функция select была заменена фиксированной функцией с предложением Jason's delay.
Таким образом, вам не нужно беспокоиться об изменении существующих вызовов для использования функции-оболочки (и после того, как это будет решено в Chrome, вы можете просто удалить вышеуказанную прокладку и вернуться к нормальной работе).
textbox.select(); // now runs select with setTimeout built-in (in Chrome only)
Редактировать : вам может потребоваться изменить соответствие пользовательского агента с "chrome" на "webkit", поскольку эта проблема возникает во всех браузерах webkit, включая Safari, и это исправление будет работать для любого из их.