Когда событие 'размытости' имеет место, как я могу узнать, какой фокус элемента перешел *в*?

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

172
задан mikemaccana 1 September 2017 в 11:19
поделиться

10 ответов

Хм... В Firefox можно использовать explicitOriginalTarget для получения по запросу элемента, на который нажали. Я ожидал toElement делать то же для IE, но это, кажется, не работает... Однако можно вытянуть недавно сфокусированный элемент из документа:

function showBlur(ev)
{
   var target = ev.explicitOriginalTarget||document.activeElement;
   document.getElementById("focused").value = 
      target ? target.id||target.tagName||target : '';
}

...

<button id="btn1" onblur="showBlur(event)">Button 1</button>
<button id="btn2" onblur="showBlur(event)">Button 2</button>
<button id="btn3" onblur="showBlur(event)">Button 3</button>
<input id="focused" type="text" disabled="disabled" />
<час>

Протест: Эта техника делает не работа для изменений фокуса, вызванных переключение вкладок через поля с клавиатурой, и не работает вообще в Chrome или Safari. Большая проблема с использованием activeElement (кроме IE) состоит в том, что это последовательно не обновляется, до после blur событие было обработано и не может иметь никакого допустимого значения вообще во время обработки! Это может быть смягчено с изменением на техника, которую Michiel закончил тем, что использовал :

function showBlur(ev)
{
  // Use timeout to delay examination of activeElement until after blur/focus 
  // events have been processed.
  setTimeout(function()
  {
    var target = document.activeElement;
    document.getElementById("focused").value = 
      target ? target.id||target.tagName||target : '';
  }, 1);
}

Это должно работать в большинстве современных браузеров (протестированный в Chrome, IE и Firefox), с протестом, что Chrome не устанавливает внимание на кнопки, которые являются , нажал (по сравнению с с вкладками к).

84
ответ дан Community 23 November 2019 в 20:40
поделиться

Можно использовать событие mousedown документа вместо размытия:

$(document).mousedown(function(){
  if ($(event.target).attr("id") == "mySpan") {
    // some process
  }
});
16
ответ дан 23 November 2019 в 20:40
поделиться

Таким образом:

<script type="text/javascript">
    function yourFunction(element) {
        alert(element);
    }
</script>
<input id="myinput" onblur="yourFunction(this)">

Или если Вы присоединяете слушателя через JavaScript (jQuery в этом примере):

var input = $('#myinput').blur(function() {
    alert(this);
});

Редактирование : извините. Я неправильно читал вопрос.

-2
ответ дан Armin Ronacher 23 November 2019 в 20:40
поделиться

Я предлагаю использовать глобальные переменные blurfrom и blurto. Затем настройте все элементы, о которых Вы заботитесь собирающийся присвоить их положение в DOM к переменной blurfrom, когда они теряют фокус. Кроме того, настройте их так, чтобы получение фокуса установило переменную blurto на их положение в DOM. Затем Вы могли использовать другую функцию в целом для анализа blurfrom и blurto данных.

0
ответ дан stalepretzel 23 November 2019 в 20:40
поделиться

я думаю, что это не possibe с IE, который можно попытаться использовать window.event.toElement, но это, dosn't работают с Firefox!

1
ответ дан T J 23 November 2019 в 20:40
поделиться

Можно ли инвертировать то, что Вы проверяете и когда? Это - то, если Вы remeber, что было размыто в последний раз:

<input id="myInput" onblur="lastBlurred=this;"></input>

и затем в onClick для Вашего промежутка, вызовите функцию () с обоими объектами:

<span id="mySpan" onClick="function(lastBlurred, this);">Hello World</span>

Ваша функция могла тогда решить, инициировать ли Ajax. Управление AutoCompleter. Функция имеет нажатый объект и размытый объект. onBlur уже произошел так, он не заставит предложения исчезнуть.

2
ответ дан bmb 23 November 2019 в 20:40
поделиться

Я также пытаюсь заставить Autocompleter проигнорировать размывание, если определенный нажатый элемент и имеет рабочее решение, но только для Firefox из-за explicitOriginalTarget

Autocompleter.Base.prototype.onBlur = Autocompleter.Base.prototype.onBlur.wrap( 
        function(origfunc, ev) {
            if ($(this.options.ignoreBlurEventElement)) {
                var newTargetElement = (ev.explicitOriginalTarget.nodeType == 3 ? ev.explicitOriginalTarget.parentNode : ev.explicitOriginalTarget);
                if (!newTargetElement.descendantOf($(this.options.ignoreBlurEventElement))) {
                    return origfunc(ev);
                }
            }
        }
    );

Это значение по умолчанию оберток кода onBlur метод Autocompleter и проверки, если ignoreBlurEventElement параметры установлен. если это установлено, это проверяет каждый раз, чтобы видеть, является ли нажатый элемент ignoreBlurEventElement или нет. Если это, Autocompleter не делает cal onBlur, еще это называет onBlur. Единственная проблема с этим состоит в том, что это только работает в Firefox, потому что explicitOriginalTarget свойством является конкретный Mozilla. Теперь я пытаюсь найти различный путь, чем использование explicitOriginalTarget. Решение, которое Вы упомянули, требует, чтобы Вы добавили onclick поведение вручную к элементу. Если мне не может удаться решить проблему explicitOriginalTarget, я предполагаю, что буду следовать за Вашим решением.

2
ответ дан matte 23 November 2019 в 20:40
поделиться

Я решил его в конечном счете с тайм-аутом на onblur событии (благодаря совету друга, который не является StackOverflow):

<input id="myInput" onblur="setTimeout(function() {alert(clickSrc);},200);"></input>
<span onclick="clickSrc='mySpan';" id="mySpan">Hello World</span>

Работы и в FF и в IE.

18
ответ дан Michiel Borkent 23 November 2019 в 20:40
поделиться

Редактирование: А hacky способ сделать это должен был бы создать переменную, которая отслеживает фокус для каждого элемента, о котором Вы заботитесь. Так, если Вы заботитесь, что 'myInput' потерянный фокус, установите переменную на него на фокусе.

<script type="text/javascript">
   var lastFocusedElement;
</script>
<input id="myInput" onFocus="lastFocusedElement=this;" />

Исходный Ответ: можно передать 'это' функции.

<input id="myInput" onblur="function(this){
   var theId = this.id; // will be 'myInput'
}" />
0
ответ дан brock.holum 23 November 2019 в 20:40
поделиться

имейте в виду, что решение с explicitOriginalTarget не работает для переходов текст-ввод-текст-ввод.

попробуйте заменить кнопки следующими текстовыми вводами, и вы получите увидеть разницу:

<input id="btn1" onblur="showBlur(event)" value="text1">
<input id="btn2" onblur="showBlur(event)" value="text2">
<input id="btn3" onblur="showBlur(event)" value="text3">
0
ответ дан 23 November 2019 в 20:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: