[js]function CreateXMLHttpRequestObject() { var xmlHttp; try { xmlHttp = new XMLHttpRequest(); } catch(e) { var XMLHttpVersions = new Array('MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'); for(var i=0; i<XMLHttpVersions.length && !xmlHttp; i++) { try { xmlHttp = new ActiveXObject(XMLHttpVersions); } catch(e) {} } } if(!xmlHttp) { alert("Ваш браузер не поддерживает ассинхронную передачу"); } else { return xmlHttp; } }[/js] Ни кто не замечал что проверка замедляет запрос? Я вот так делаю процентов на 25 быстрее [js]var xmlHttp = null; try { xmlHttp = new XMLHttpRequest(); } catch(e) { xmlHttp = null; } try { if(!xmlHttp) xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { xmlHttp = null; } try { if(!xmlHttp) xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { xmlHttp = null; } return xmlHttp;[/js]
Есть варианты лучше? В моем запросе особых проверок нет. Просто попытки создания для Mozila Opera Safari и для IE либо вообще null если браузер не поддерживает AJAX.
по слухам майкрософт новые версии работают быстрее и в них багов меньше и всё такое а впрочем можно вообще не проверять...
Отличный скрипт! Спасибо афтару! У меня вопрос по иному немного. <option disabled='disabled'></option>в ослике не работает, есть альтернатива на javascript сделать эту весчь?
А не подскажите, как сделать индикатор загрузки? что бы юзер понял, что данные подгружаются, а не тупит страница?
Привет. У меня вот такая проблема: Я сделала все как написано на форуме но у меня не получается. Я данные вывожу из БД MySQL. Элементы списка динамичные... Вот код пхп файла: Код (Text): <?php require 'inc/connect.php'; //htmlspecialchars() Преобразует специальные символы в HTML сущности, будем считать для того, чтобы простейшие попытки взломать наш сайт обломались. $_GET['id'] = htmlspecialchars($_GET['id']); // если у нас не запрашивали никакую определенную страницу, то будем выводить нашу самую первую. Если Вы ее давно удалили, поставьте вместо единички идентификатор той странички, которую Вы хотели бы грузить по умолчанию if(empty($_GET['id'])) $_GET['id'] = 1; $result = mysql_query("SELECT * FROM pages WHERE id = '".$_GET['id']."';", $link); $row = mysql_fetch_array($result); echo '<html> <head> <title>'.$row['metatitle'].'</title> <META NAME="description" CONTENT="'.htmlspecialchars(stripslashes($row['metadescription'])).'"> <META NAME="keywords" CONTENT="'.htmlspecialchars(stripslashes($row['metakeywords'])).'"> <meta http-equiv="Content-Language" content="ru"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <script type="text/javascript"> function syncList() { } //Метод sync() - принимает список из значений атрибутов id элементов SELECT, образующих связанный список и запускает их синхронизацию syncList.prototype.sync = function() { //Перебираем аргументы (id элементов SELECT) и назначаем событиям onChange селектов, с соответствующими id, функцию-обработчик. //В качестве обработчика выступает второй метод объекта syncList - _sync (напрямую его вызывать не нужно) //Обработчик назначается всем элементам SELECT кроме последнего в списке аргументов, т.к. последний не влияет ни на какой другой элемент SELECT и с ним не нужно синхронизироваться. for (var i=0; i < arguments.length-1; i++) document.getElementById(arguments[i]).onchange = (function (o,id1,id2){return function(){o._sync(id1,id2);};})(this, arguments[i], arguments[i+1]); document.getElementById(arguments[0]).onchange();//запускаем обработчик onchange первого селекта, чтобы при загрузке страницы заполнить дочерние селекты значениями. } //служебный метод _sync - срабатывает при смене выбранного элемента в текущем (старшем) элементе SELECT (по его событию onChange) и изменяет содержимое зависимого селекта на основании значения выбранного в старшем селекте. syncList.prototype._sync = function (firstSelectId, secondSelectId) { var firstSelect = document.getElementById(firstSelectId); var secondSelect = document.getElementById(secondSelectId); secondSelect.length = 0; //обнуляем второй (подчиненный) SELECT if (firstSelect.length>0)//если первый (старший) SELECT не пуст { //из свойства dataList, с данными для заполнения подчиненных селектов, берем ту часть данных, которая соответствует именно значению элемента, //выбранного в первом селекте, и определяет содержимое подчиненного элемента SELECT. var optionValue = firstSelect.options[ firstSelect.selectedIndex==-1 ? 0 : firstSelect.selectedIndex].value; var optionData = this.dataList[optionValue]; if (!optionData) optionData = this.dataList[parseInt(optionValue)]; //заполняем второй (подчиненный) селект значениями (создаем элементы option) for (var key in optionData || null) secondSelect.options[secondSelect.length] = new Option(optionData[key], key); //если в старшем SELECT-е нет выделенного пункта, выделяем первый if (firstSelect.selectedIndex == -1) setTimeout( function(){ firstSelect.options[0].selected = true;}, 1 ); //если во втором списке нет выделенного пункта, выделяем первый его пункт if (secondSelect.length>0) setTimeout( function(){ secondSelect.options[0].selected = true;}, 1 ); } //если второй (подчиненный) селект имеет в свою очередь свои подчиненные селекты (те, для которых он главный), //то запускаем его обработчик onchange, чтобы изменить его подчиненные селекты secondSelect.onchange && secondSelect.onchange(); }; </script> </head> <body> '; $result = mysql_query ("SELECT * from pages") or die (mysql_error()); $mrow = mysql_fetch_array($result); echo '<select id="action" name="action" size="10" >'; do { echo "<option value=".$mrow['id'].">".$mrow['title']."</option>"; } while ($mrow = mysql_fetch_array($result)); echo '</select>'; echo ' <select size="10" id="ok" name="ok"></select>'; ' <!-- либо делаем меню ручками, по принципу: --> <br /><br /> '.stripslashes($row['body']).' </body> </html> '; ?> Можно ли сделать как то так как на рисунке? Создать кнопку при нажатии которой переводится элемент из первого списка во второй? Кто знает как это сделать? Подскажите пожалуйста. [/img]
Реализация на PHP + jQuery c JSON Задача: 2 таблицы, каталог, саб каталоги пришпиленные к каталогу, 2 select'а, нажимаем на один или несколько в select "каталоги" в select "саб-каталоги" закидывается список саб каталогов от выбранных вами "каталогов" Заранее изменяюсь я не сильно умею изъясняться "по русски" Вот картинка =) лучше один раз увидеть... [js] $('select[name="company_catalog[]"]').change(function (){ var cid = $(this).val(); $.ajax({ type:"POST", url:"subcatatalogs.php", data:{"company_catalog[]": cid}, dataType:'json', success: function(data) { $('select[name="company_subcat[]"]').empty(); $.each(data.items, function(i,item) { $('select[name="company_subcat[]"]').append('<option value="'+item.value+'">'+item.name+'</option>'); }); } }); });[/js] subcatatalogs.php PHP: <?php $cidx = $_POST['company_catalog']; if (is_array($cidx)) { $sql = "SELECT * FROM `il_company_subcat` WHERE `cid` IN ("; foreach ($cidx as $cid) { $sql .= $cid.','; } $sql = substr($sql, 0, -1); $sql .= ") ORDER by `cid` AND `name` DESC;"; $result = '{"items":['; // Закидываем $sql в БД $query = $this->db->query($sql); foreach ($query->result() as $row) { $catalog = $this->Msubmit->get_company_catalog($row->cid); $result .= '{"value": "'.$row->scid.'", "name": "'.$catalog->name.' → '.$row->name.'"},'; } $result = substr($result, 0, -1); $result .= ']}'; echo $result; } else { echo '{ "items": [ { "value": "0", "name": "-----" } ] }'; } ?> Всё очень просто и легко..
Привет всем. Спасайте. Нужны динамические селекты, которые зависят друг от друга. Тоесть без строгой иерархии, как написано в первом сообщении. Там второй селект реагирует только на действия первого. А мне нужно чтобы из 20 допустим каждый реагировал на действия каждого. Напишу пример, для более точной картины. Итак: 20 селектов, в каждый из БД выбирается по 27 имён. Я выбираю допустим в 10 селекте, имя номер 5. В остальных селектах это имя должно исчезнуть, чтобы его невозможно было выбрать второй раз. Если же я выбранное имя возвращаю на пустой селект, это имя появляется во всех селектах снова. Надеюсь понятно выразился. Сам пытался переделать этот скрипт что вначале написал, пробовал с ajax, пока результатов не добился. Заранее огромное спасибо.
Пишу виджет для Wordpress. Нужно сделать 3 выпадающих списка. (их я уже сделал) Но сначала нужно выбрать в первом списке марку авто, после чего во втором должны появиться модели данной марки, после выбора которых в 3-м выпадающем списке появятся модификации. Код (Text): <?php echo "<form id='myform' method='get' action=''> <select id='manuf' name='manuf'> <option value=''>Выбрать...</option>"; $query = mysql_query("SELECT id,brand FROM tof_manufacturers ORDER BY brand"); $result = mysql_fetch_array($query); do { echo "<option value='".$result['id']."'>".$result['brand']."</option>"; } while($result = mysql_fetch_array($query)); echo "</select><br><br>"; echo "<select id='model' name='model'> <option value=''>Выбрать...</option>"; $query1 = mysql_query("SELECT id,description FROM tof_models WHERE manufacturer_id=504"); $result1 = mysql_fetch_array($query1); do { echo "<option value='".$result1['id']."'>".$result1['description']."</option>"; } while($result1 = mysql_fetch_array($query1)); echo "</select><br><br>"; echo "<select id='god' name='god'> <option value=''>Выбрать...</option>"; $query1 = mysql_query("SELECT capacity,start_date,end_date FROM tof_types WHERE model_id=24 GROUP BY capacity,start_date,end_date"); $result1 = mysql_fetch_array($query1); do { echo "<option value='".$result1['id']."'>".$result1['capacity']." (".$result1['start_date']."-".$result1['end_date'].")</option>"; } while($result1 = mysql_fetch_array($query1)); echo "</select>"; echo "</form>"; ?> Вместо 504 должна быть какае-то переменная, переданная из 1-го селекта после выбора. Вместо 24 должна быть какае-то переменная, переданная из 2-го селекта после выбора. Как эту задачу реализовать? Сайт: http://autotime.by/ С JS совсем не дружу... Догадываюсь что через AJAX нужно делать, но тут я полный профан.
Хочу понять как этот аякс работает, в двух словах. В каком направлении копать. По каким запросам гугл мучать. Может какой пример для быстрейшего понимания. 10 минут ушло только на прочтение статьи на википедии. А что-бы полностью разобраться с JS уйдёт как минимум месяц свободного времени, которого к сожалению нет
Люди помогите решить вопрос! Я в Ajax новичок и ничего еще не смыслю, а обойтись без него не смогу. Как решить вот такой вопрос? Есть таблица в MySQL с полями ( | id(key) |, | kolodec |,| arm1 |, | arm2 |, | arm3 |, | arm4 |, | arm5 |, | arm6 |, | arm7 |, | arm8 | ), Есть 2 меню <form><Select><?php include ("armatura.php"); ?></Select><Select></Select></form>. В первый селект я подключил файл-скрипт (armatura.php), вот его содержимое: ------------------------------------------------------------------------------------------------------------------------------------------------------------- Armatura.php ------------------------------------------------------------------------------------------------------------------------------------------------------------- <?php include ("base.php"); $result= mysql_query("SELECT kolodec FROM armatura", $connect); while ($row = mysql_fetch_object($result)) { echo '<option value="' . $row->kolodec . '"'; if ($selected == $row->kolodec) echo 'selected'; echo ">" . $row->kolodec . "</option>"; }; mysql_close($connect); ?> -------------------------------------------------------------------------------------------------------------------------------------------------------------- Этот скрипт выводит в первый <select> поле "kolodec". как сделать что бы во втором <select> выводились данные полей (| arm1 |, | arm2 |, | arm3 |, | arm4 |, | arm5 |, | arm6 |, | arm7 |, | arm8 |), в зависимости выбраного колодца. вот скрин таблицы: https://docs.google.com/file/d/0B80ob0nH8umNWjFOQTZyMDBFZEU/edit
повторюсь! я только начинающий. html, css, - знаю отлично php, MySQL - начал учить И мне вот подсказали что эту задачу можно решить с помощью Ajax. так делаю и мне вываливается список только одного из столбцов..... в мне нужно что бы выдавало все столбцы. пример Выбрал К1 и мне выдало во втором селекте его Arm1, Arm2, или Выбрал К10 и мне выдало во втором селекте его Arm1, Arm2, Arm3, Arm4, Arm5, Arm6,
1. В первом селекте выбираешь элемент. Javascript-ом получаешь это значение. 2. Аяксом посылаешь запрос на сервер. Делаешь выборку из базы. Создаешь html селект. 3. Возвращаешь полученный селект и вставляешь в html http://api.jquery.com/jquery.post/
Не отрабатывает $.Post вот код: <script> $(document).ready(function() { $('#kolodec').change(function() { $.post( 'otpravka.php', function(data) { $("#armmat").html(data); }); }); }); </script> В файле "otpravka.php" код такого плана: <?php echo ('Отлично! Ваш текст выведен на экран'); ?> как сделать что бы пост отработал?
Ребят подскажите, есть пару селектов которые строятся с БД. Хочу сделать чтобы при выборе первого селекта во втором отображались не все возможные поля с БД, а определенные для первого селекта. Возможно ли данный код заюзать для этого?
Всем привет, сталкнулся с проблемой! есть вот ето Код (Text): <label>Регион</label> <select type="text" class="inplaceError" id="region_id" name="region_id" value="" /> <option value="0"></option> <option value="4052">Краснодарский край</option> <option value="4800">Ростовская область</option> </select> а так же есть php скрипт Код PHP Код (Text): <?php echo $userdata['region_id'];?> двигаемся далее... Хочу очень сделать так, чтобы select сработал автоматически!! в php скрипте находится код региона(сейчас там 4052)! Куда его поставить ума не сложу! по сути я хочу сделать по значению value="" автоматический выбор из опций где Код (Text): value="4052" = value="<?php echo $userdata['region_id'];?>" Код (Text): <label>Регион</label> <select type="text" class="inplaceError" id="region_id" name="region_id" value="<?php echo $userdata['region_id'];?>" /> <option value="0">-Выберите район-</option> <option value="4052">Краснодарский край</option> <option value="4800">Ростовская область</option> </select> ТАК НЕ РАБОТАЕТ!!! ПОЧЕМУ?((( Добавлено спустя 3 минуты 8 секунд: тут без js не обойтись?как можно рншить эту задачу?