|
|
|
| Имеется 2 поля типа select ,суть в том, что если я выбираю какое-то определённое значение из первого поля, то содержимое второго поля должно автоматически измениться взависимости от содержания БД. Так вот как это правильнее реализовать? Обязательна ли перезагрузка страницы или это можно сделать средствами, к примеру JS? Если же лучше будет использовать PHP, то как сделать взаимозависимые select-формы? | |
|
|
|
|
|
|
|
для: Keyses
(08.03.2009 в 02:48)
| | В этом случае лучше пользовать аякс. Вот тут селект с выбором страны-региона-города так реализован. Потому что нереально вытащить сразу всю базу в селекты и перезагружать страницу каждый раз не очень то удобно. | |
|
|
|
|
|
|
|
для: Николай2357
(08.03.2009 в 08:00)
| | Там несколько модулей для Drupal, это не совсем то, что мне нужно. У меня на сайте движок самопальный, а посему требуется доступная документация (если хорошая, то можно и на английском), потому что с AJAX раньше вообще не работал.
Может у кого есть ссылки на хорошие маны?
P.S. Насколько приоритетно для решения данной задачи использовать библиотеку jQuery? | |
|
|
|
|
|
|
|
для: Keyses
(08.03.2009 в 11:16)
| | >Там несколько модулей для Drupal
Какие еще модули, я сам писал, не доделал кстати.
P.S. Насколько приоритетно для решения данной задачи использовать библиотеку jQuery?
Совершенно лишнее... Весит минимум 30кб плюс скрипт управления. А решается в несколько строк. | |
|
|
|
|
|
|
|
для: Николай2357
(08.03.2009 в 13:38)
| | Сорри, перепутал вкладки в опере местами, потому и подумал про Drupal. А вообще да, довольно изящно выглядит, только вот как быть с файлами:
<script type="text/javascript" language="javascript" >
var path_sel = "http://profsvaha.ru/strana/functions/selects.php";
var path_valid = "http://profsvaha.ru/strana/modules/registr/valid.php";
</script>
|
Особенно с первым иначе не особо понятно что там вообще происходит. | |
|
|
|
|
|
|
|
для: Keyses
(08.03.2009 в 14:07)
| | Это не из этой оперы ))) Это для валидатора.
Вот:
var d = document;
var div_select;
var req = Create();
function Country()
{
div_select = "region";
d.getElementById('city').innerHTML = '';
var a = d.getElementById('country_id').value;
query = "country_id="+a;
Request(query);
}
function Region()
{
div_select = "city";
var a = d.getElementById('region_id').value;
query = "region_id="+a;
Request(query);
}
function Create(){
if(navigator.appName == "Microsoft Internet Explorer"){
req = new ActiveXObject("Microsoft.XMLHTTP");
}else{
req = new XMLHttpRequest();
}
return req;
}
function Request(query)
{
req.open('post', 'selects.php' , true );
req.onreadystatechange = Refresh;
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
req.send(query);
}
function Refresh()
{
var a = req.readyState;
var b = req.responseText;
if( a == 4 )
d.getElementById(div_select).innerHTML = b;
}
| Только кодировка файлов - utf-8. Сами селекты нужны? | |
|
|
|
|
|
|
|
для: Николай2357
(08.03.2009 в 14:54)
| | Нашёл неплохое объяснение тут.
Проблема заключается в том что у меня все данные в одной БД. Выборка в селект нулевого уровня идёт из одного столбца, а выборка в селект первого уровня из соседнего столбца базы. И я смутновато представляю как сделать так, чтобы Ajax делал запрос к БД на выборку, вот почему попросил *.php файл. | |
|
|
|
|
|
|
|
для: Keyses
(08.03.2009 в 15:03)
| | Теперь, когда Вы все это сделаете, как там написано, сравните по объёму (учитывая и сам фреймворк). с тем, что я написал выше и почуствуйте разницу. | |
|
|
|
|
|
|
|
для: Николай2357
(08.03.2009 в 15:07)
| | Ну да, это очевидно что размер будет ~ 125 кб. больше.
Насколько я понял, строчка req.open('post', 'selects.php' , true ); передаёт в скрипт сначала параметр country_id, затем region_id, верно? и там их уже соответственным образом обрабатывать так, как мне нужно, а вот как из скрипта selects.php вернуть выборку в select? | |
|
|
|
|
 112.8 Кб |
|
|
для: Keyses
(08.03.2009 в 15:18)
| | Вот этот файл просто подключите:
<?php
function country()
{
$country_id = isset($_POST['country_id'])?$_POST['country_id']:NULL;
$query = "SELECT * FROM `".PREFIX."country`";
$res = mysql_query($query);
$select = "<select id=\"country_id\" name=\"country_id\" onchange=\"Country()\" >
<option value='0'>- Выберите страну -</option>";
while($row = mysql_fetch_array($res))
{
$select .= "<option ";
if($row['country_id'] == $country_id)
$select .="selected=\"selected\"";
$select .= " value='".$row['country_id']."'>".$row['name']."</option>\r\n";
}
$select .= "</select>";
return $select;
}
?>
| А вот это тот, к которому обращается аякс:
<?php
include ("db_connect.php");
function region()
{
$country_id = isset($_POST['country_id'])?$_POST['country_id']:NULL;
$query = "SELECT * FROM `region` WHERE `country_id`='".(int)$country_id."'";
$res = mysql_query($query);
$select = "<select id=\"region_id\" name=\"region_id\" onchange=\"Region()\" >
<option value='0'>- Выберите pегион -</option>";
while($row = mysql_fetch_array($res))
{
$select .= "<option value='".$row['region_id']."'>".$row['name']."</option>\r\n";
}
$select .= "</select>";
return $select;
}
function city()
{
$region_id = isset($_POST['region_id'])?$_POST['region_id']:NULL;
$query = "SELECT * FROM `city` WHERE `region_id`='".(int)$region_id."'";
$res = mysql_query($query);
$select = "<select id=\"city_id\" name=\"city_id\" >
<option value='0'>- Выберите город -</option>";
while($row = mysql_fetch_array($res))
{
$select .= "<option value='".$row['city_id']."'>".$row['name']."</option>\r\n";
}
$select .= "</select>";
return $select;
}
if(isset($_POST['country_id']))
echo region();
if(isset($_POST['region_id']))
echo city();
?>
|
А дамп базы в аттаче. | |
|
|
|
|
|
|
|
для: Николай2357
(08.03.2009 в 16:33)
| | Спасибо, большое. Буду разбираться ;) | |
|
|
|
|
|
|
|
для: Николай2357
(08.03.2009 в 16:33)
| | Николай, добрый день, подскажите пожалуйста, как должны выглядеть файлы, а то уже неделю бьюсь, но чего -то бестолку, никак не соображу как все состыковать.
Заранее благодарен. | |
|
|
|
|
 122.1 Кб |
|
|
для: dzer52
(22.04.2009 в 11:34)
| | Не совсем понял, какие нужны файлы.... Но вот в аттаче рабочий вариант, так наверно легче будет разобраться. | |
|
|
|
|
|
|
|
для: Николай2357
(22.04.2009 в 15:15)
| | Огромадное спасибки!
Буду разбираться | |
|
|
|
|
автор: Владимир555 (01.05.2009 в 00:31) |
|
|
для: Николай2357
(22.04.2009 в 15:15)
| | Уважаемый Николай! К сожалению, скрипт не работает в IE7 - выдает ошибку 1072896658 | |
|
|
|
|
|
|
|
для: Владимир555
(01.05.2009 в 00:31)
| | Исправил. | |
|
|
|
|
автор: Владимир555 (01.05.2009 в 03:16) |
|
|
для: Владимир555
(01.05.2009 в 00:31)
| | Теперь все работает! Отлично!!! | |
|
|
|
|
|
|
|
для: Николай2357
(08.03.2009 в 08:00)
| | Немного не пойму в чём проблема, но только в IE не работает InnerHTML, может у меня где ошибка или существует какая-нибудь альтернатива через DOM-реализацию?
<script type="text/javascript" language="javascript">
function city_from_chg(val) {
query = "city_from="+encodeURIComponent(val);
Request(query);
}
function Create(){
if (navigator.appName == "Microsoft Internet Explorer")
object = new ActiveXObject("Microsoft.XMLHTTP");
else
object = new XMLHttpRequest();
return object;
}
function Request(query) {
var req = Create();
req.open("post", "ajax_new.php", true)
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
req.onreadystatechange = function () {
if (req.readyState == 4 && req.status == 200)
document.getElementById("city_to").innerHTML = req.responseText; //Не работает!!!
}
req.send(query);
}
</script>
|
| |
|
|
|
|
|
|
|
для: Keyses
(03.05.2009 в 18:55)
| | Люди, помогите разобраться пожалуйста.... | |
|
|
|
|