2015-08-11 1 views
4

Я не могу заставить IE11 сфокусировать входной элемент после его вставки в DOM. Элемент не будет получать ввод текста после фокусировки, но его текст-заполнитель больше не отображается. Элемент создается React, и я к нему доступ через Реагировать refs объект в componentDidMount:Невозможно сфокусировать вход с помощью JavaScript в IE11

componentDidMount() { 
    this.refs.input.getDOMNode().focus(); 
} 

Я попытался добавить короткую задержку с помощью setTimeout:

componentDidMount() { 
    setTimeout(() => this.refs.input.getDOMNode().focus(), 10); 
} 

Я также попытался добавления tabIndex от "1" на входе.

В случае, если это полезно, здесь оказываются JSX:

<div style={style}> 
    <div style={labelStyle}>Enter a name to begin.</div> 

    <form onSubmit={this.submit} style={formStyle}> 
     <input 
      tabIndex="1" 
      ref="input" 
      value={this.state.username} 
      onChange={this.updateUsername} 
      placeholder="New User Name" 
      style={inputStyle} 
     /> 
     <button {...this.getBrowserStateEvents()} style={this.buildStyles(buttonStyle)}>Create</button> 
    </form> 
</div> 

Есть ли какой-нибудь трюк, чтобы получить фокус работать в IE11, что я не знаю?

+0

'input' кажется неправильным выбором для имени ссылки – pherris

+0

Вы играли с другими методами жизненного цикла? Мне интересно, если вызовы 'componentDidUpdate' вводят фокус, заданный в' componentDidMount'. – pherris

+0

Проблема была вызвана свойством '-ms-user-select: none' css. – SimpleJ

ответ

4

Проблема была сосредоточена в IE11 нарушается, когда свойство CSS -ms-user-select: none применяется ко входу. Так путем изменения:

* { 
    -ms-user-select: none; 
} 

в

*:not(input) { 
    -ms-user-select: none; 
} 

Я был в состоянии решить эту проблему. Вот код для воспроизведения проблемы: http://codepen.io/anon/pen/yNrJZz

2

Я не думаю, что ваша проблема исходит из функции focus(), я думаю, что это происходит от селектора.

Чтобы доказать это, я только что открыл свой IE11 и попытался сосредоточиться С.О. искать вход в правом верхнем углу страницы, используя следующую команду:

document.getElementById('search')[0].focus() 

Так, просто откройте консоль IE (F12) и тип, который должен сфокусировать вход поиска. Если это так, то проблема исходит от селектора, который не является входом, как вы думаете.

Он работает на моем IE 11.0.9600.17905

+2

Проблема существует только в IE. Фокус отлично работает в Chrome и Firefox. Также вход получает некоторый частичный фокус (я могу щелкнуть его, и текст заполнителя снова появляется, но я не могу набирать текст, не нажимая его снова). Я также не использую селектор; Я использую реактивный объект 'refs'. – SimpleJ

+0

Тогда, может быть, проблема исходит от 'ref's refs object', я не знаю, что это такое, но если это библиотека третьей части или что-то, проблема может исходить от них напрямую. Я вижу, что 'focus()' корректно работает на IE11 при использовании на входе. – Vadorequest

 Смежные вопросы

  • Нет связанных вопросов^_^