За последние 24 часа нас посетили 56900 программистов и 1685 роботов. Сейчас ищут 1226 программистов ...

зависимый селект - решение?

Тема в разделе "JavaScript и AJAX", создана пользователем TigerZaka, 28 май 2012.

  1. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    Проблема следующая: если action в форме пустой, то данные отлично передаются между селектами, но тогда кнопка submit неудел.
    Если ставлю action, то при первом же onchange, он submit и выполняет ((
    Можно ли как то выйти из данной ситуации?
    Код (Text):
    1.  
    2. <?
    3. function is_sel($a, $field)
    4. {
    5.   $b = isset($_POST[$field])?$_POST[$field]:NULL;
    6.   if($a == $b) return 'selected="selected"';
    7. }
    8. ?>
    9. <form action="add_street.php" method="post" id="addstreet">
    10.     <h2>Добавление улицы</h2>
    11.    
    12.     <?php
    13.     $query = "SELECT * FROM city";
    14.     $res = mysql_query($query);
    15.     ?>
    16.     <select name="city" onchange="document.getElementById('addstreet').submit()">
    17.         <option value="">Выберите город</option>
    18.         <?php  
    19.         while($row = mysql_fetch_array($res))
    20.             echo "<option ".is_sel($row['id_city'],'city')." value='".$row['id_city']."'>".$row['city']."</option>\r\n";
    21.             ?>
    22.     </select>
    23.    
    24.     <?php
    25.     $gorod = isset($_POST['city'])?$_POST['city']:NULL;
    26.     if($gorod && $gorod !== 0)
    27.     {
    28.     $query = "SELECT * FROM area WHERE id_city =  '".(int)$_POST['city']."' ";
    29.     $res = mysql_query($query);
    30.     ?>
    31.     <select name="area">
    32.         <option value="">Выберите район</option>
    33.         <?php  
    34.         while($row = mysql_fetch_array($res))
    35.             echo "<option ".is_sel($row['id_area'],'area')." value='".$row['id_area']."'>".$row['area']."</option>\r\n";
    36.            
    37.     echo "</select>";
    38.     } ?>
    39.     <input type="text" name="street">
    40.     <input type="submit value="запись">
    41. </form>
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Естественно, что отправляет, у тебя же там на onchange навешен обработчик
    Код (Text):
    1. document.getElementById('addstreet').submit()
    А элемент с id="addstreet" - и есть твоя форма. Ты же сам говоришь ему "отправь форму, когда select будет изменён". Повесь туда другой обработчик (какую-нибудь JS-функцию, которая будет делать нужную работу) - и не будет форма отправляться, а будет выполняться та функция.
     
  3. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    ок, я попробовал получить значение, получилось.
    Код (Text):
    1. function fuu() {
    2.     $new_name = document.getElementById("city").value;
    3.     document.write($new_name);
    4. }
    ....
    Код (Text):
    1. <select name="city" id="city" onchange="fuu()">
    2.       <option value="">Выберите город</option>
    3.       <?php  
    4.       while($row = mysql_fetch_array($res))
    5.          echo "<option ".is_sel($row['id_city'],'city')." value='".$row['id_city']."'>".$row['city']."</option>\r\n";
    6.          ?>
    7.    </select>
    Но никак не могу понять, как значение передать в следующий селект?
    Код (Text):
    1. $query = "SELECT * FROM area WHERE id_city =  '".(int)$_POST['city']."' ";
    2.    $res = mysql_query($query);
    3.    ?>
    4.    <select name="area" id="area">
    5.       <option value="">Выберите район</option>
    6.       <?php  
    7.       while($row = mysql_fetch_array($res))
    8.          echo "<option ".is_sel($row['id_area'],'area')." value='".$row['id_area']."'>".$row['area']."</option>\r\n";
    9.    echo "</select>";
    10.    }
    ай нид хелп )
     
  4. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Ну а что значит "передать в следующий селект"? Как ты это понимаешь? Что должно произойти на страничке?
     
  5. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    в первом селекте, функцией (в моем примере fuu() ) берется значение выбранного option'а.
    при выборке во второй селект, каким-то образом учитывается значение из первого, и запрос аля ...WHERE id_city =(будет вставлять сюда нужную циферку) :)))
    Ну вот так я вижу, мягко говоря схематично. не пойму куда смотреть надо
    ...
    пробовал так (тут у меня тоже ошибки вроде):
    index.php
    Код (Text):
    1. <?php require 'config.php';?>
    2.  <form action="add_street" method="post" id="addstreet">
    3.  <h2>форма добавления</h2>
    4.  
    5.  <?php
    6.  $query = "SELECT * FROM city";
    7.  $res = mysql_query($query);
    8.  var_dump($query);
    9.  ?>
    10.  <select id ="city" name="city">
    11.   <option value="" selected="selected">выберите город</option>
    12.   <?php
    13.   while($row = mysql_fetch_array($res))
    14.       {
    15.       echo "<option value='".$row['id_city']."'>".$row['city']."</option>\r\n";
    16.       }
    17.    ?>
    18.  </select>
    19.  <span id="area_select"></span>
    20.  <input type="text" name="street" />
    21.  <input type="submit" value="добавить" />
    22. </form>
    23. <script type="text/javascript" src="jquery-1.7.2.min.js"></script>
    24. <script type="text/javascript" src="newjavascript.js"></script>      
    newjavascript.js
    Код (Text):
    1. $('#city').change ( function(){
    2.    $('#area_select').load('get_area.php?city='+$('#city').val())
    3. })
    get_area.php
    Код (Text):
    1. <?php
    2.  $gorod = isset($_GET['city'])?$_GET['city']:NULL;
    3.  if($gorod)
    4.  {
    5.  $query = "SELECT * FROM area WHERE id_city =  '".(int)$gorod."' ";
    6.  $res = mysql_query($query);
    7.  var_dump($query);
    8.  ?>
    9.  <select id ="area" name="area">
    10.   <option value="">Выберите область</option>
    11.   <?php
    12.   while($row = mysql_fetch_array($res))
    13.    {echo "<option value='".$row['id_area']."'>".$row['area']."</option>\r\n";}
    14.  } ?>
    15. </select>
    Но мне заранее этот вариант не нравится. Получается, если у меня будет около 10-15 селектов, на каждый создавать php файл, как-то загонно
     
  6. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    получилось связать два селекта, завтра напишу, спать охота.
     
  7. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    Код (Text):
    1. <script>
    2. function getXMLHTTP() {
    3.         var xmlhttp=false; 
    4.         try{
    5.             xmlhttp=new XMLHttpRequest();
    6.         }
    7.         catch(e)    {      
    8.             try{           
    9.                 xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
    10.             }
    11.             catch(e){
    12.                 try{
    13.                 xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    14.                 }
    15.                 catch(e1){
    16.                     xmlhttp=false;
    17.                 }
    18.             }
    19.         }
    20.         return xmlhttp;
    21.     }
    22.    
    23.     function getArea(strURL) {     
    24.        
    25.         var req = getXMLHTTP();
    26.        
    27.         if (req) {
    28.            
    29.             req.onreadystatechange = function() {
    30.                 if (req.readyState == 4) {
    31.                     if (req.status == 200) {                       
    32.                         document.getElementById('areadiv').innerHTML=req.responseText;                     
    33.                     } else {
    34.                         alert("There was a problem while using XMLHTTP:\n" + req.statusText);
    35.                     }
    36.                 }              
    37.             }          
    38.             req.open("GET", strURL, true);
    39.             req.send(null);
    40.         }  
    41.     }
    42. </script>
    43. <form method="post" action="add_script.php" name="form1">
    44. <table width="60%" border="0" cellspacing="0" cellpadding="0">
    45.   <tr>
    46.     <td width="150">City</td>
    47.     <td  width="150"><select name="city" onChange="getArea('find_area.php?city='+this.value)">
    48.     <option value="">Select City</option>
    49.     <option value="1">vrn</option>
    50.     <option value="2">lip</option>
    51.         </select></td>
    52.   </tr>
    53.   <tr style="">
    54.     <td>area</td>
    55.     <td ><div id="areadiv"><select name="area">
    56.     <option>Select area</option>
    57.         </select></div></td>
    58.   </tr>
    59. </table>
    60. </form>
    findarea.php
    Код (Text):
    1. <? $city=$_REQUEST['city'];
    2. require 'config.php';
    3. $query="select area from area where id_city=$city";
    4. $result=mysql_query($query);
    5.  
    6. ?>
    7. <select name="area">
    8. <option>Select area</option>
    9. <? while($row=mysql_fetch_array($result)) { ?>
    10. <option value><?=$row['area']?></option>
    11. <? } ?>
    12. </select>
    так как стянул код, есть вопрос. function getXMLHTTP() - как правильно объяснить назначение этой функции?

    Добавлено спустя 39 минут 16 секунд:
    пытаюсь добавить третий селект, find_street.php:
    Код (Text):
    1. <?
    2. $city=$_REQUEST['city'];
    3. $area=$_REQUEST['area'];
    4. require 'config.php';
    5. $query="select street from street where id_city=$city and id_area=$area";
    6. $result=mysql_query($query);
    7.  
    8. ?>
    9. <select name="street">
    10. <option>Select street</option>
    11. <? while($row=mysql_fetch_array($result)) { ?>
    12. <option value><?=$row['street']?></option>
    13. <? } ?>
    14. </select>
    только в index.php,
    Код (Text):
    1. <div id="areadiv"><select name="area" onChange="getStreet('find_street.php?city='+this.value&area='+this.value)">
    this.value не прокатит два раза ((, добавил функцию:
    Код (Text):
    1. function getStreet(strURL) {       
    2.         var req = getXMLHTTP();
    3.         if (req) {
    4.             req.onreadystatechange = function() {
    5.                 if (req.readyState == 4) {
    6.                     if (req.status == 200) {                       
    7.                         document.getElementById('streetdiv').innerHTML=req.responseText;                       
    8.                     } else {
    9.                         alert("There was a problem while using XMLHTTP:\n" + req.statusText);
    10.                     }
    11.                 }              
    12.             }          
    13.             req.open("GET", strURL, true);
    14.             req.send(null);
    15.         }  
    16.     }
    куда смотреть, поскажите?
    Ура!! решил задачу, все спасибо )