В JQuery, как читать элемент в фокусе прямо сейчас? - PullRequest
0 голосов
/ 03 февраля 2011

Есть одно поле ввода текста и одна кнопка.

<input type="text" id="myInput" onblur="saveValue();" />    
<input type="button" id="myButton" />

При событии Blur (поле ввода) вызывается функция (saveValue). Я не хочу вызывать эту функцию, если текущим фокусом является кнопка (myButton).

Как я могу сделать это в JQuery?

Ответы [ 5 ]

1 голос
/ 03 февраля 2011

Вы не можете надежно сделать это, потому что один элемент размыт перед фокусировкой следующего.Ближайшим приближением будет установка времени ожидания, которое вы очищаете, если кнопка находится в фокусе:

$(document).ready(function(){
    var timer;

    $('input').blur(function(){
        timer = setTimeout(saveValue, 100);
    });

    $('#myButton').focus(function(){
        clearTimeout(timer);
    });
}); 
0 голосов
/ 03 февраля 2011

Я не уверен, правильно ли я понимаю ваш вопрос. Вот моя попытка: Создайте класс css для входного текста и используйте jquery, чтобы ссылаться на него таким образом.

Вот пример кода:

<input type="text" id="txtName" class="input-text" />
<input type="submit" value="Submit"/>

<script type="text/javascript">
$(function(){
  $('.input-text').blur(function(){
    var $this = $(this);
    //Call function save value by passing the reference of the current object
    SaveValue($this);
  });
});
</script>
0 голосов
/ 03 февраля 2011

Не уверен, что я что-то пропустил, но почему бы просто не привязать событие размытия только к полю ввода:

$("#yourInputId").live("blur", function()
{
  saveValue();
});
0 голосов
/ 03 февраля 2011

Вы можете просто попробовать ..

$(':focus').each(function(){    
   if($(this).attr('id') == 'myButton'){
     //do stuff here
   } 
});

Этот пост на форуме jquery предполагает, что это работает в большинстве случаев.

0 голосов
/ 03 февраля 2011

Вы можете попробовать:

if(!$('#myButton').is(':focus'))
    ...
...