JavaScript, определить, если текстовое поле имеет фокус? - PullRequest
3 голосов
/ 12 сентября 2011

Я обновляю скрипт, чтобы он пересекался с браузером. Текущий код у меня выглядит следующим образом.

function testFocus(){   
    var testSelection = document.getElementById('chattext').contentWindow.
                  window.document.selection.createRange().parentElement();

    while (testSelection)
    {
        if (testSelection.id == "chatContent") {
            return true;
        }
        testSelection = testSelection.parentElement;
    }
    return false; 
}

Однако следующий код больше не работает в современных браузерах. В настоящее время приведенный выше код должен иметь выделенный текст. Где нужно просто проверить, что текстовое поле имеет фокус. Функция используется в качестве проверки перед добавлением текста кнопкой / javascript.

1 Ответ

0 голосов
/ 12 сентября 2011

Мне кажется, что вы можете использовать прослушиватель событий для установки переменной.Единственная проблема заключается в том, что IE использует attachEvent(event, callback) вместо addEventListner, поэтому вам действительно нужно добавить код

<script type="text/javascript">
  var ChatHasFocus = false;
  var ts = document.getElementById('chattext');
  function setFocus()  {ChatHasFocus = true;}
  function setNoFocus(){ChatHasFocus = false;}
  if (ts.addEventListener != undefined) { 
      ts.addEventListener('focus', setFocus, false);
      ts.addEventListener('blur', setNoFocus, false);
  } else if (ts.attachEvent != undefined) {
      ts.attachEvent('onfocus', setFocus);
      ts.attachEvent('onblur', setNoFocus);
  } else {
      ts.onmouseover = setFocus;
      ts.onmouseout = setNoFocus;
  }
</script>

edit - я добавил теги скрипта для отображенияВы, как это добавляет к вашему документу.Я тестировал Firefox и Chrome, и это, кажется, работает, но собрать песочницу IE вместе может быть немного сложнее для меня.Я уверен, что есть кое-что, чего мне не хватает - я посмотрю.

edit2 Я ошибся с кодом IE.Отключает кавычки 'undefined' Я исправил приведенный выше код, чтобы отразить ответ, который был протестирован и wotkign в Firefox, Chrome и IE6.У меня нет других IE для тестирования.

...