Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Динамическое обновление списка select (продолжение мытарств) (https://javascript.ru/forum/dom-window/1343-dinamicheskoe-obnovlenie-spiska-select-prodolzhenie-mytarstv.html)

macam 25.06.2008 02:40

Динамическое обновление списка select (продолжение мытарств)
 
Доброго времени суток!

С JS работаю совсем недавно. Прошу помочь в решении ситуации:

есть некий индексный файл, содержащий необходимые функции и элементы интерфейса, в т.ч. и злополучный список. содержимое списка берется из php-обработчика (actlist.php), который, в свою очередь, берет элементы списка из базы. Задача: нажимая на кнопку "Обновить список", получать от обработчика новые элементы (не перезагружая всю страницу) и представлять все это в виде простого выпадающего списка. Вот тут-то и проблема: не могу никак добится нормальной html-формы, на страницу выводится html-код, но в виде простого текста:

<select id = 'lex_act_id1' name = 'lex_act_id1'><option value = '0'>Выберите<option value = '6'>Объект 1 <option value = '3'>Объект 2 <option value = '4'>Объект 3 <option value = '5'>Объект 4 <option value = '2'>Объект 5 <option value = '1'>Объект 6 </select>


как бы его заставить обработать этот выдаваемый html? сил больше нет :(

краткие листинги:

<script type="text/javascript" src="text-utils.js"> </script>
  <script language="javascript" type="text/javascript">
  var request = null;

   function createRequest() {
     try {
       request = new XMLHttpRequest();
     } catch (trymicrosoft) {
       try {
         request = new ActiveXObject("Msxml2.XMLHTTP");
       } catch (othermicrosoft) {
         try {
           request = new ActiveXObject("Microsoft.XMLHTTP");
         } catch (failed) {
           request = null;
         }
       }
     }

     if (request == null)
       alert("Error creating request object!");
   }

   function getActList() {
     createRequest();
     var url = "actlist.php";
     request.open("GET", url, true);
     request.onreadystatechange = updatePage;
     request.send(null);
  }

  function updatePage() {
    if (request.readyState == 4) {
      var newTotal = request.responseText;
      var ActList = document.getElementById("act-list");
      replaceText(ActList, newTotal);
    
     
    }
  }

  </script>


</head>

<body>

........
<span id="act-list">  </span>
                     <form method="GET"> 
                   <input value="Обновить список" type="button" onClick="getActList();" /> 
                   
                   </form>


содержание файла text-utils.js:

function replaceText(el, text) {
  if (el != null) {
    clearText(el);
    var newNode = document.createTextNode(text);
    el.appendChild(newNode);
  }
}



function clearText(el) {
  if (el != null) {
    if (el.childNodes) {
      for (var i = 0; i < el.childNodes.length; i++) {
        var childNode = el.childNodes[i];
        el.removeChild(childNode);
      }
    }
  }
}

function getText(el) {
  var text = "";
  
  if (el != null) {
    if (el.childNodes) {
      for (var i = 0; i < el.childNodes.length; i++) {
        var childNode = el.childNodes[i];
        if (childNode.nodeValue != null) {
          text = text + childNode.nodeValue;
        }
      }
    }
  }
  
  return text;
  
}


содержание файла actlist.php:

<?
require_once('functions.php');


?>
    
<?php          
$act_array = get_act($lex_act_id);
display_act($act_array, @$lex_act_id, $all = 1);
                   ?>

Андрей Параничев 25.06.2008 15:47

А если попробовать вот так?
function replaceText(el, text) {
  if (el != null) {
    el.innerHTML = text;
  }
}

То будет отображаться html?

Кроме того, зачем вы используете получение данных в готовом html? Или это принципиально в вашем случае?
Все проблемы отпали бы, если бы вы получали, например, JSON объект, по которому уже создавался элемент html.
Или вы хотите сделать один код для всех случаев, так называемый AHAH?

macam 25.06.2008 16:04

Спасибо, помогло!

с JS я работаю второй день и с JSON еще не разобрался и потом, я хотел бы сделать код для разных форм (и не только форм), а то их в этом маленьком проекте уж очень много.


Часовой пояс GMT +3, время: 08:04.