Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 03.06.2008, 18:00
Интересующийся
Отправить личное сообщение для DieseL Посмотреть профиль Найти все сообщения от DieseL
 
Регистрация: 28.05.2008
Сообщений: 12

Сообщение от Андрей Параничев Посмотреть сообщение
DieseL,
Только что проверил код в Opera, Firefox, Ie 5, Ie5.5, Ie6. Везде работало (после замены из предыдущего сообщения). Какие именно вы изменения сделали в скрипте, и выводится ли ошибка в Ie (слева снизу восклицательный знак). Не работает частично или полностью?
Сам скрипт я выпер в отдельный файл с названием city.js
подключаю его так:

<script type="text/javascript" src="city.js"></script>


скрипт начинался:
var HTTPReq = XMLHttpRequest ? 
          new XMLHttpRequest() : 
          new ActiveXObject("Microsoft.XMLHTTP");

изменил на:
try {
    var HTTPReq = new XMLHttpRequest();
} catch(e) {
    var HTTPReq = new ActiveXObject("Microsoft.XMLHTTP");
}

После изменений ,Опера 9.27 как работала корректно так и работает, а вот ИЕ7 при загрузке страницы - все ок, выбираю страну, он активирует селект с городами, но если я меняю страну список уже не обновляется, при этом ИЕ7 ошибок не выдает никаких, как будто все в порядке, просто данные не меняются ((

Возможно нужно какие то дополнительные заголовки добавлять? по типу нокеш или что то ещё?

Последний раз редактировалось DieseL, 03.06.2008 в 18:03.
Ответить с цитированием
  #12 (permalink)  
Старый 03.06.2008, 19:06
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

DieseL,
Попробуйте заменить строчку
HTTPReq.open("GET", "page.php?country="+contryList.value);

На
HTTPReq.open("GET", "page.php?country="+contryList.value+"&rand="+Math.random());
Ответить с цитированием
  #13 (permalink)  
Старый 03.06.2008, 23:08
Интересующийся
Отправить личное сообщение для DieseL Посмотреть профиль Найти все сообщения от DieseL
 
Регистрация: 28.05.2008
Сообщений: 12

Андрей Параничев,
Спасибо огромное! Решил вопрос сам но не без Вас!

З.ы. Если кому будет нужно/полезно/интересно говорите, пример скрипта выложу

Последний раз редактировалось DieseL, 04.06.2008 в 00:56.
Ответить с цитированием
  #14 (permalink)  
Старый 04.06.2008, 20:25
Интересующийся
Отправить личное сообщение для DieseL Посмотреть профиль Найти все сообщения от DieseL
 
Регистрация: 28.05.2008
Сообщений: 12

Андрей Параничев,
Скажите, а возможно ли как то модифицировать код чтобы при выборе во втором селекте пункт "Другой город", вместо селекта появлялась форма <input type=text> и внесенные в нее данные отправлялись на сервер в таком же виде как запрос на выборку?

P/s/ ну а там уже скрипт пхп который добавляет в базу новый город...

Последний раз редактировалось DieseL, 04.06.2008 в 20:28.
Ответить с цитированием
  #15 (permalink)  
Старый 11.06.2008, 00:45
Интересующийся
Отправить личное сообщение для DieseL Посмотреть профиль Найти все сообщения от DieseL
 
Регистрация: 28.05.2008
Сообщений: 12

Уважаемый, Андрей Параничев!

Подскажите пожалуйса почему невыходит две подобные формы на одной страницы установить? Они конфликтуют друг с другом, естевственно имена функций/елементов изменены на другие во второй форме (
Ответить с цитированием
  #16 (permalink)  
Старый 15.06.2008, 01:22
Гость
 
Сообщений: n/a

Сообщение от DieseL Посмотреть сообщение
Андрей Параничев,
Спасибо огромное! Решил вопрос сам но не без Вас!

З.ы. Если кому будет нужно/полезно/интересно говорите, пример скрипта выложу
Если можно покажите пример работающего скрипта..
Ответить с цитированием
  #17 (permalink)  
Старый 15.06.2008, 18:32
Интересующийся
Отправить личное сообщение для DieseL Посмотреть профиль Найти все сообщения от DieseL
 
Регистрация: 28.05.2008
Сообщений: 12

ВотЪ (:

Файл index.php

<script type="text/javascript" src="district.js"></script>

Область:
<select name="Area" style="width:130px" onchange="AreaList(this)">
<option value="0" selected="selected">Выбор</option>
<option value="1">Крым</option>
<option value="2">Киевская</option>
<option value="3">Волынская</option>
<option value="4">Одесская</option>
</select>

Районный центр:
<select disabled="disabled" name="District_List" style="width:130px" id="District_List">
<option>Выбор</option>
</select>


Файл district.js

function District_makeRequest(url) {

http_request = false;

if (window.XMLHttpRequest)
{ // Mozilla, Safari,...
	http_request = new XMLHttpRequest();
if (http_request.overrideMimeType)
{
	http_request.overrideMimeType('text/xml');
}
}
else if (window.ActiveXObject)
{ // IE
try
{
	http_request = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
	http_request = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{}
}
}

if (!http_request)
{
		alert('Не получается отправить XMLHTTP запрос');
			return false;
}
	http_request.onreadystatechange = alertContents;
	http_request.open('GET', url, true);
	http_request.send(null);
}

function alertContents()
{
	if (http_request.readyState == 4)
{

var Districties = eval("("+http_request.responseText+")");
    // Заполняем список:
fillDistrict_List(Districties);

}
}

// Запоминаем выбранную страну, чтоб не
// дублировать запросы в будущем.
var selectedArea = null;


// Функция, вызываемая при изменении списка
// (при выборе страны)
function AreaList(AreaList)
{
    // Если выбран "пустой" вариант - очищаем список:
    if(AreaList.value === "")
    {
       clearDistrict_List();
       return;
    }

    // Проверяем выбрана ли уже какая-то страна:
    if(selectedArea !== null)
    {
       // Если выбрана, проверяем не текущая ли выбрана:
       if(selectedArea == AreaList.value)
       {
          // Если текущая уже выбрана - делать нечего.
          return;
       }
    }
    // Если никакая не выбрана, или выбрана не текущая, ставим текущую.
    selectedArea = AreaList.value;

    // Далее запрашиваем сервер на предмет списка городов выбранной страны.
    // Тут должна быть ваша страница php, её работа будет описана далее:

	District_makeRequest("district_select.php?district="+AreaList.value+"&rand="+Math.random());

    // После этого будет вызван обработчик (который мы писали ранее, так что выходим)
    return true;
}

// Фукнция, которая добавляет элементы в список городов:
function fillDistrict_List(elements)
{
   // elements передан в формате JSON, так что щас он - объект
   // для начала очистим текущий список городов
   clearDistrict_List();

   // Уберём статус неактивен с элемента:
   var District_List = document.getElementById("District_List");
   District_List.disabled = false;

   // Скидываем счётчик option'ов (1 - потому что первый элемент пуст)
   var i = 1;

   // Рассмотрим elements, в котором ключи это values, а значения - имена.
   for(var key in elements)
   {
       // Создаём и добавляем элемент в список:
       var District = new Option(elements[key], key, false, false);
		   District_List.options[i++] = District;
   }
   return true;
}

// Функция, которая очищает все элементы из второго списка:
function clearDistrict_List()
{
   var District_List = document.getElementById("District_List");

   // Такое очищение, походу, работает во всех браузерах нормально.
   while (District_List.length > 0) District_List.options[0] = null;

   District_List.options[0] = new Option('', 0, false, false);

   // Установим его в неактивный
   District_List.disabled = "disabled";
}


Файл district_select.php

if(!array_key_exists('district', $_GET)) die();

// Подключаемся к БД
mysql_connect("$user_host", "$user_name", "$user_pass");
mysql_select_db ("$user_base");

// Составляем безопасный запрос:
$query = sprintf("SELECT * FROM district WHERE area='%s'",
         mysql_real_escape_string($_GET['district']));

// Выполняем запрос:
$result = mysql_query($query);

$output = array();

// Проходим циклом по результату
while($row = mysql_fetch_assoc($result))
{
   $output[] = '"'.addslashes($row['id']).'": '.
               '"'.addslashes($row['name']).'"';
}

// Выводим, если есть что выводить:
if(sizeof($output) > 0)
{
   echo '{'. implode(',', $output) .'}';
}
Ответить с цитированием
  #18 (permalink)  
Старый 06.10.2008, 12:08
Интересующийся
Отправить личное сообщение для gagagogo Посмотреть профиль Найти все сообщения от gagagogo
 
Регистрация: 01.09.2008
Сообщений: 18

Можно ли как то запихнуть в select option не используя при этом цикл на JavaScript. Например при клике на элемент select c сервера должны загрузиться значения options. Их много. Перебор в цикле ( new Options) займёт много времени. А innerHTML и outerHTML с select не работают корректно. И ещё вопрос такой: почему в ваших примерах используете HttpRequest ? У меня чешутся руки написать загрузку option-сов через динамически созданный тэг script. Будет ли это иметь какие нибудь негативные последствия ?
Ответить с цитированием
  #19 (permalink)  
Старый 06.10.2008, 12:41
Кандидат Javascript-наук
Отправить личное сообщение для magistr_bender Посмотреть профиль Найти все сообщения от magistr_bender
 
Регистрация: 07.09.2008
Сообщений: 133

ну как бы пример добавления оптионсов на форуме точно есть, именно это я когдато уже спрашивал.. юзайте поиск
можно просто динамически создавать оптионсы
Ответить с цитированием
  #20 (permalink)  
Старый 08.11.2008, 02:01
QwQwPP
 
Сообщений: n/a

Проблема
Попробовал реализовать предложенный код - в результате во втором окне select появляется только одно значение, хотя в базе их много.
Подскажите, в чем может быть загвоздка
Ответить с цитированием
Ответ



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

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