Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.07.2012, 15:04
Аватар для razerxxx
Аспирант
Отправить личное сообщение для razerxxx Посмотреть профиль Найти все сообщения от razerxxx
 
Регистрация: 05.10.2011
Сообщений: 85

$('input').on('focus', function() { $(this).is(':focus') }) -
$('input').on('focus', function() { 
    console.log($(this).is(':focus'));
}));

Вот такой вот код - везде кроме хрома работает ожидаемо. В хроме в консоль выводится false.
Одно из решений - сделать так:
$('input').on('focus', function() { 
    var it = this;
    setTimeout(function() {
        console.log($(it).is(':focus'));
    }, 100);
    
}));

Но это какой-то костыль получается... У кого есть какие идеи по этому поводу?
Ответить с цитированием
  #2 (permalink)  
Старый 06.07.2012, 16:04
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

razerxxx,
Объясните задачу и цель данного скрипта ?
Приведите полный код вместе с HTML и скриптом выполняющего вышеизложенную задачу, хотя бы не в хроме
как оформлять =>тут http://javascript.ru/formatting
Ответить с цитированием
  #3 (permalink)  
Старый 06.07.2012, 18:35
Аватар для razerxxx
Аспирант
Отправить личное сообщение для razerxxx Посмотреть профиль Найти все сообщения от razerxxx
 
Регистрация: 05.10.2011
Сообщений: 85

Ну скажем так, надо запускать некоторую функцию по определенным, условиям. Т.е например даны несколько полей input, при получении фокуса (focus), изменении данных (keypress) данные из поля input уходят на сервер. От сервера возвращается текст с ошибкой (если она имеется), и ошибка отображается во всплывающей подсказке. Но ошибка должна отобразиться только если поле в фокусе, если не в фокусе, то ошибка не отображается, а записывается в скрытый див и отобразится только если на поле снова будет наведен фокус.
<div class="field">
    <input name="username" />
    <div class="error"></div>
</div>
<div class="field">
    <input name="email" />
    <div class="error"></div>
</div>

var show_error = function(field) {
    var error = $(field).parent().find('.error');
    if ($(field).is(':focus')) {
        error.show();
    } else {
        error.hide();
    }
    
}
var set_error = function(field, error) {
    $(field).parent().find('.error').html(error);
    show_error(field);
}
$('.field input').on('keypress, change, blur', function() {
    var field = this;
    var action = $(this).attr('name');
    var value = $(this).val();
    $.get('http://some_url', {action: action, value: value}, function(error) {
        set_error(field, error);
    });
});
$('.field input').on('focus', function() {
    show_error(this);
});


Пока я набираю текст. Происходит отправка данных на сервер, и собственно возвращается ошибка. Но пока отправка идет, я могу перескочить на другое поле. Тогда полученную ошибку показывать не надо, а надо показать ошибку у другого поля (если она там уже есть, т.е. была занесена в div.error когда либо ранее).
Вобщем если совсем просто, при получении полем фокуса - отображаем ошибку для этого поля, при потере фокуса - скрываем. Но поскольку функция отображающая ошибку, запускается так же при дугих событиях, то в ней мы проверяем, $(field).is(':focus'). То есть в частном случае фактически и получается такая задача - которая работает не так как ожидается в хроме:
$('input').on('focus', function() { 
    console.log($(this).is(':focus'));
}));

Что интересно:
$('input').on('click', function() { 
    console.log($(this).is(':focus'));
}));

отрабатывает везде ожидаемо.

Последний раз редактировалось razerxxx, 06.07.2012 в 18:44.
Ответить с цитированием
  #4 (permalink)  
Старый 06.07.2012, 18:41
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

razerxxx,
стандартная функци при изменении данных в любом элементе формы => onchange http://htmlbook.ru/html/attr/onchange
Ответить с цитированием
  #5 (permalink)  
Старый 06.07.2012, 18:53
Аватар для razerxxx
Аспирант
Отправить личное сообщение для razerxxx Посмотреть профиль Найти все сообщения от razerxxx
 
Регистрация: 05.10.2011
Сообщений: 85

И?? оно у меня используется: $('.field input').on('keypress, change, blur', function() { ...
Вроде это эквивалентно использованию onchange. Тем более onchnge не будет срабатывать пока форма не потеряет фокус, у меня обработка идет в том числе и по мере набора текста. Да и вопрос не об этом
Ответить с цитированием
  #6 (permalink)  
Старый 06.07.2012, 18:58
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

razerxxx,
В заголовке написано про input
onchange сработает при потере фокуса inputом -а иначе данные еще вводяцо
кроме $('.field input').on('change', function() { ...
думаю не нужно ничо ставить

лучше ставить обработчик на тег <input name="username" onchange="tst(this.value)"/>

function tst(val){...

}

Последний раз редактировалось Deff, 06.07.2012 в 19:02.
Ответить с цитированием
  #7 (permalink)  
Старый 06.07.2012, 19:13
Аватар для razerxxx
Аспирант
Отправить личное сообщение для razerxxx Посмотреть профиль Найти все сообщения от razerxxx
 
Регистрация: 05.10.2011
Сообщений: 85

Мы немного не поняли друг, друга. Мне необходимо чтобы данные отправлялись еще при вводе слова, не только по onchange. Да и вопрос не про это, с отправкой данных проблем нет.

Ставить обработчик на тэг - как-то мне не очень нравятся такие идеи. Js код должен быть в js файле. Тем более у меня около 10 таких input-ов. На каждый ставить обработчик - както нерационально. Все же проще $('input').on('click', ...)
Ответить с цитированием
  #8 (permalink)  
Старый 06.07.2012, 19:19
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

razerxxx,
Сообщение от razerxxx
Мне необходимо чтобы данные отправлялись еще при вводе слова,
Если данные при вводе то
$('.field input').on('mouseout mousemove keydown keypress keyup',function(e) {

Последний раз редактировалось Deff, 06.07.2012 в 22:40.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
$('my').load(); Как сделать, чтобы это заработало mycoding Общие вопросы Javascript 25 02.10.2016 23:43
Object.predefinedProperties создает новый объект с назначенными getter'ами/setter'ами devote Ваши сайты и скрипты 13 06.03.2012 21:57
2 function в 1 LAV45 AJAX и COMET 5 27.07.2011 14:49
Свойства посредством полиморфных функций tenshi Ваши сайты и скрипты 0 18.03.2010 17:12
хитросплетения Global,контекст,this,Reference kefi Общие вопросы Javascript 109 20.11.2009 23:34