Как получить правильный контекст, если я хочу применить фокус ()?
Я пытаюсь сделать следующее:
elemnt = document.getElementById('someFormField');
elemnt.focus('none');
Только где-то в фокусе генерируется где-то еще в сценарии, ставится в очередь и применяется, когда приложение запрашивает его.
function testIt() {
var queued = {
elementId: 'someFormField'
, func: focus
, args: ['none']};
elemnt = document.getElementById(queued.elementId);
queued.func.apply(elemnt, queued.args);
}
Вышеупомянутый метод работает для других функций, но для метода focus я получаю ошибку:
Opera: WRONG_THIS_ERR
Firefox: uncaught exception: [Exception... "Illegal operation on WrappedNative prototype object" (...)]
Как заставить это работать?
(я пытаюсь разобраться в проблеме, поэтому меня не интересуют ответы «используйте рамки X»)
Обновление:
Кажется, существует некоторая путаница в отношении того, почему я передаю аргумент focus()
: я включил только аргумент, чтобы показать, что передача аргумента focus()
не приведет к ошибке.
С таким же успехом я мог бы набрать:
document.getElementById('someFormField').focus();
Обновление (2):
Поскольку Anonymous не работает в IE6, я сейчас использую промежуточную функцию для решения проблемы:
function testIt() {
var queued = {
elementId: 'someFormField'
, func: setFocus
, args: ['someFormField']};
elemnt = document.getElementById(queued.elementId);
queued.func.apply(elemnt, queued.args);
}
function setFocus(elemntId) {
document.getElementById(elemntId).focus();
}
Если совместимость с IE6 не указана в листе требований, Решение от Anonymous - это ответ