Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.11.2015, 17:25
Аватар для sovsem-nub
Профессор
Отправить личное сообщение для sovsem-nub Посмотреть профиль Найти все сообщения от sovsem-nub
 
Регистрация: 15.10.2014
Сообщений: 255

как свернуть optgroup в select?
Делаю выбор города через select . Города разбиты в группы по регионам optgroup. Но список получается просто огромным, есть ли возможность свернуть все группы до названия и разворачивать группу, только при клике мышкой?
пример селекта
<select name="select_projects" id="select_projects">
    <option value="">project.xml</option>
    <optgroup label="client1">
        <option value="">project2.xml</option>
    </optgroup>
    <optgroup label="client2">
        <option value="">project5.xml</option>
        <option value="">project6.xml</option>
        <optgroup label="client2_a">
            <option value="" style="margin-left:23px;">project7.xml</option>
            <option value="" style="margin-left:23px;">project8.xml</option>
        </optgroup>
        <option value="">project3.xml</option>
        <option value="">project4.xml</option>
   </optgroup>
   <option value="">project0.xml</option>
   <option value="">project1.xml</option>
</select>


мой список городов тут http://jsfiddle.net/wu1upn0e/2/
Ответить с цитированием
  #2 (permalink)  
Старый 05.11.2015, 17:52
Аватар для sovsem-nub
Профессор
Отправить личное сообщение для sovsem-nub Посмотреть профиль Найти все сообщения от sovsem-nub
 
Регистрация: 15.10.2014
Сообщений: 255

или как-то прикрутить к нему input, чтобы пишешь в нем "мо", а он в селекте показывает города на "мо" ?
Ответить с цитированием
  #3 (permalink)  
Старый 05.11.2015, 18:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

sovsem-nub,
html select быстрый выбор
Ответить с цитированием
  #4 (permalink)  
Старый 05.11.2015, 19:32
Аватар для sovsem-nub
Профессор
Отправить личное сообщение для sovsem-nub Посмотреть профиль Найти все сообщения от sovsem-nub
 
Регистрация: 15.10.2014
Сообщений: 255

Спасибо, Рони. Твой код работает но с моим длинным списком он так тормозит, что пару раз ie даже вылетал http://jsfiddle.net/wu1upn0e/4/
Ответить с цитированием
  #5 (permalink)  
Старый 05.11.2015, 19:34
Аватар для sovsem-nub
Профессор
Отправить личное сообщение для sovsem-nub Посмотреть профиль Найти все сообщения от sovsem-nub
 
Регистрация: 15.10.2014
Сообщений: 255

хотя хром и ff просто летают.... как так?
Ответить с цитированием
  #6 (permalink)  
Старый 05.11.2015, 21:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

sovsem-nub,
что делает ?
var r = /\\u([\d\w]{4})/gi;
x = x.replace(r, function (match, grp) {
    return String.fromCharCode(parseInt(grp, 16)); } );
Ответить с цитированием
  #7 (permalink)  
Старый 05.11.2015, 21:37
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Быстрый поиск по селекту
sovsem-nub,
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Быстрый поиск по селекту</title>
 <script>
window.onload = function() {
    var XHR = "onload" in new XMLHttpRequest ? XMLHttpRequest : XDomainRequest;
    var xhr = new XHR;
    xhr.open("GET", "http://pecom.ru/ru/calc/towns.php", true);
    xhr.onload = function() {
        var x = this.responseText;
        x = JSON.parse(x);
        var sel = document.querySelector("#select_projects"),
            inp = document.querySelector('[name="opt"]');

        function createSelect(val) {
            var fragment = document.createDocumentFragment();
            var reg = new RegExp("^" +val, "ig");
            Object.keys(x).forEach(function(key) {
                var optgroup = document.createElement("optgroup");
                optgroup.setAttribute("label", key);
                var op = x[key];
                Object.keys(op).forEach(function(key) {
                    var text = op[key];
                    if (!val || reg.test(text)) {
                        var option = new Option(text, key);
                        optgroup.appendChild(option)
                    }
                    reg.lastIndex = 0;
                });
                optgroup.children.length && fragment.appendChild(optgroup)
            });
            sel.innerHTML = "";
            sel.appendChild(fragment)
        }
        createSelect();
        inp.addEventListener("input", function() {
            createSelect(this.value)
        })
    };
    xhr.onerror = function() {
        alert("Ошибка " + this.status)
    };
    xhr.send()
};

</script>

</head>
<body>
<form action="http://" name="f">
<input type="text" name="opt">
<select name="name_ob"  id="select_projects">
</select>
</form>

</body>

</html>

Последний раз редактировалось рони, 05.11.2015 в 21:41.
Ответить с цитированием
  #8 (permalink)  
Старый 05.11.2015, 21:56
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

sovsem-nub,

не лучше ли ajax запрос регионов и получение списка их городов? С ростом аппетита разрастется все, а таскать большие списки на клиента не лучшее решение. Есть и готовое API по КЛАДР.
Ответить с цитированием
  #9 (permalink)  
Старый 06.11.2015, 13:09
Аватар для sovsem-nub
Профессор
Отправить личное сообщение для sovsem-nub Посмотреть профиль Найти все сообщения от sovsem-nub
 
Регистрация: 15.10.2014
Сообщений: 255

рони, Вы весь код переделали. Спасибо. Даже города в группах оставили.... /\\u([\d\w]{4})/gi действительно оказалось не нужно. Просто я в начале json alert ом выводил и там абра-кадабра была, а этот код ее в русский текст превращал.
laimas, пытаюсь к своему магазину на js прикрутить рассчет доставок от разных транспортных компаний. (пэк, деловые линии и почта России) у каждой своя кодировка городов и доставка есть не в каждый город. Мало готовых примеров и я не знаю как поступают в этом случае.
Я планировал слить справочники из трех компаний в один селект (будет огромен) в таком виде: Тула [Пэк] , Тула [Почта России] ,Тула [Деловые линии]. соответственоо покупатель вводит в инпут Рони свой город Тула и в селекте остаются Три Тулы с разными вариантами Транспортных компаний. Он выбирает одну из и жмет кнопку "рассчитать". Код считывает текст между [] и отправляет на расчет в нужную компанию. Это нормальный подход или очередной велосипед?
Ответить с цитированием
  #10 (permalink)  
Старый 07.11.2015, 10:50
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Все зависит от размера, при большом размере выгоднее получать ajax запросом. И это будет тоже самое поле ввода по принципу "живого поиска".
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно отключить option из select? griga999 Общие вопросы Javascript 12 24.02.2015 18:36
Как правильно реализовать такой функционал? Julian Общие вопросы Javascript 3 16.01.2015 12:34
Select - как получить следующее за выбранным? zanzubar jQuery 2 23.11.2012 11:45
Как выбрать параметр в select по умолчанию? hurtmind Серверные языки и технологии 0 23.09.2012 23:21
Как вывести на экран значение функции SELECT MAX(id) Владдд Серверные языки и технологии 3 25.01.2009 16:07