Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.08.2012, 22:20
Аспирант
Отправить личное сообщение для SkaN Посмотреть профиль Найти все сообщения от SkaN
 
Регистрация: 27.08.2011
Сообщений: 50

Как сохранить фокус на элементе?
Вопрос сформулирован некорректно, но я не смог сжать проблему до одного предложения.
Суть в чем: по событию focusin на input под ним показыается элемент (список). По исчезновению фокуса из элемента список прячется. Из этого списка нужно выбрать что-нибудь. Но проблема такова: нажатие на список считается потерей фокуса у этого input'а и событие для члена списка даже не срабатывает, т.е. вернуть искусственно список обратно нельзя. Подскажите, пожалуйста, как можно не убирать фокус с элемента (или вернуть фокус обратно), если клик был по члену списка?
Вот весь код:
<label for="category1-name">Рубрика из первого списка: </label><input type="text" id="category1-name" name="category1-name" title="Выберите рубрику из первого списка" /><br />
<ul id="list1" name="list1">
    <li id="3">?????</li>
    <li id="16">Рубрика</li>
</ul>
<label for="category2-name">Рубрика из второго списка: </label><input type="text" id="category2-name" name="category2-name" title="Выберите рубрику из второго списка" /><br />
<ul id="list2" name="list2">
    <li id="13">????</li>
</ul>
<input type="hidden" id="category1" name="category1" /><input type="hidden" id="category2" name="category2" />

$(document).ready(function(){
    $("#category1-name").focus(function(){
        $("#list1").show();
    }).focusout(function(){
        $("#list1").hide();
    });
    
    $("#category2-name").focusin(function(){
        $("#list2").show();
    }).focusout(function(){
        $("#list2").hide();
    });
    
    $("#list1 li").click(function(){ alert("ololo");
        $("#category2-name").focus();
        var $name = $(this).text(),
            $id = $(this).attr("id");
            
        $("#list1 li").removeClass("selected");
            
        $("#category1-name").val($name);
        $("category1").val($id);
        alert($("category1").val());
    });
});
Ответить с цитированием
  #2 (permalink)  
Старый 30.08.2012, 22:45
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от SkaN
Суть в чем: по событию focusin на input под ним показыается элемент (список). По исчезновению фокуса из элемента список прячется.
Сделайте чтобы список показывался по фокусу - а исчезал по уборке кусора со списка через время t
Ответить с цитированием
  #3 (permalink)  
Старый 30.08.2012, 22:52
Аспирант
Отправить личное сообщение для SkaN Посмотреть профиль Найти все сообщения от SkaN
 
Регистрация: 27.08.2011
Сообщений: 50

Сообщение от Deff Посмотреть сообщение
а исчезал по уборке кусора со списка через время t
Это примерно так?
$("#list1, #list2"),mouseout(function(){
    setTimeout("$(this).hide()", t);
})
Ответить с цитированием
  #4 (permalink)  
Старый 30.08.2012, 22:57
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Может использовать label?
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 30.08.2012, 23:08
Аспирант
Отправить личное сообщение для SkaN Посмотреть профиль Найти все сообщения от SkaN
 
Регистрация: 27.08.2011
Сообщений: 50

Сообщение от Aetae Посмотреть сообщение
Может использовать label?
а что с ним сделать в этой ситуации?
Ответить с цитированием
  #6 (permalink)  
Старый 30.08.2012, 23:11
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

$("#list1, #list2"),mouseleave(function(){
setTimeout("$(this).hide()", t);
})
Ответить с цитированием
  #7 (permalink)  
Старый 31.08.2012, 01:28
Аспирант
Отправить личное сообщение для SkaN Посмотреть профиль Найти все сообщения от SkaN
 
Регистрация: 27.08.2011
Сообщений: 50

Сообщение от Deff Посмотреть сообщение
$("#list1, #list2"),mouseleave(function(){
setTimeout("$(this).hide()", t);
})
Попробовал, с таким методом получается нехорошо, потому что при намеренной потере фокуса (переключение на другое поле) список остается...
Ответить с цитированием
  #8 (permalink)  
Старый 31.08.2012, 01:36
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

SkaN
Ну мне тяжело представлять -как у Вас организован процец
Можно сделать так - наверняка есть какое то внешнее обрамление этих обоих блоков... (Лан - это позже

Пока просто уберите setTimeout()

$("#list1, #list2"),mouseleave(function(){
$(this).hide();
})
Ответить с цитированием
  #9 (permalink)  
Старый 31.08.2012, 08:40
Аватар для LittlePony
Кандидат Javascript-наук
Отправить личное сообщение для LittlePony Посмотреть профиль Найти все сообщения от LittlePony
 
Регистрация: 19.08.2012
Сообщений: 100

Сообщение от SkaN Посмотреть сообщение
Попробовал, с таким методом получается нехорошо, потому что при намеренной потере фокуса (переключение на другое поле) список остается...
Так можно и на потерю фокуса тоже реагировать. Просто создать флаг и проверять его. Если фокус потерян, но при этом мышь не над списком, то тогда действительно этот список скрывать. Можно и через таймаут скрывать через некоторое время, например если после потери фокуса мышь через полсекунды не над списком, значит этот список не нужен.
Ответить с цитированием
  #10 (permalink)  
Старый 31.08.2012, 10:22
Аспирант
Отправить личное сообщение для SkaN Посмотреть профиль Найти все сообщения от SkaN
 
Регистрация: 27.08.2011
Сообщений: 50

Сообщение от LittlePony Посмотреть сообщение
Так можно и на потерю фокуса тоже реагировать. Просто создать флаг и проверять его. Если фокус потерян, но при этом мышь не над списком, то тогда действительно этот список скрывать. Можно и через таймаут скрывать через некоторое время, например если после потери фокуса мышь через полсекунды не над списком, значит этот список не нужен.
Неплохо! Спасибо
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сохранить данные в файл? Возможно такое на JavaScript? Forgott Общие вопросы Javascript 35 26.06.2015 19:11
как правильно сохранить XML? alex171069 Events/DOM/Window 5 24.01.2012 17:27
Как сохранить динамически генерируемую html страничку? Антоныч Javascript под браузер 1 01.03.2010 17:03
Как организовать RichEdit arma Элементы интерфейса 2 18.02.2010 14:57
О наследовании событий, или как корректно его отменить. JCShen Events/DOM/Window 8 09.02.2010 00:00