[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Данные из XML строки в select
pavel24071988
Ребят! Помогите пожалуйста решить проблему.

На страничке есть селект:
<select  name="select">
<option>
Выбрать все</option>
</select>


Данные для формирования списка(<option>) получаю в виде XML строки (XMLHttpResponse -> responseXML).

Собственно вопрос в том, как теги XML строки засунуть в мой селект.
Есть идея через код: прописать создание элемента для селекта оптион через:

var text = XMLHttpResponse.getElementsByTagName('тег со словом для option');
var newoption = document.getElementByTagName('select').createElement('option');
var newtext = document.createTextNode('text');
newoption.appendChild(newtext);
document.getElementByTagName('select').appendChild(newoption);


Незнаю. Будут ли так работать? Скорее нет...

Как мне осуществить что то такое, ну очень нужно сделать за сегодня это создание списка.

Заранее спасибо.



Спустя 6 минут, 8 секунд (1.09.2011 - 15:20) Adil написал(а):
В цикле создай html рзметку <option>-ов, и засунь это на страницу (innerHtml)

Спустя 3 минуты, 50 секунд (1.09.2011 - 15:24) pavel24071988 написал(а):
Я не очень понял.
В цикле создать: значение теги.innerHTML = 'мой option' - это я понимаю
А как "В цикле создай html рзметку <option>-ов" - я не знаю, или неправильно понял.

Спустя 29 минут, 2 секунды (1.09.2011 - 15:53) ApuktaChehov написал(а):
Adil - этот подход не будет работать в IE.

pavel24071988 - метод createElement принадлежит объекту document, соответственно вызывать его нужно так:
document.createElement('option');

А ваш селект тут вообще ни причем.

Соответственно:
var text = XMLHttpResponse.getElementsByTagName('тег со словом для option')[0].childNodes[0].nodeValue;
var select = document.getElementById('select');
var newoption = document.createElement('option');
newoption.innerHTML = text;
select.appendChild(newoption);


и все ;)

Спустя 4 минуты, 39 секунд (1.09.2011 - 15:57) ApuktaChehov написал(а):
Я тут правил еще, так что посмотрите, что бы последняя версия была, моей писанины laugh.gif

Спустя 10 минут, 58 секунд (1.09.2011 - 16:08) pavel24071988 написал(а):
Спасибо

Запись
var select = document.getElementByTagName('select');

почему - то не работала, добавил ID="select" и переделал на :
var select = document.getElementsById('select');


Прописал все в функцию show
R id добавил обработчик события получил :
<select  name="select" id="select" onclick="show" >


Добавляю сейчас один элемент.
Записи добавляются но невозможно их выбрать? Они не становятся подсвеченными пр наведении на них курсора :(
Почемуже не работает.




А я только собрался про Id писать

Спустя 3 минуты, 16 секунд (1.09.2011 - 16:12) ApuktaChehov написал(а):
var select = document.getElementById('select');
Букву s уберите.

Спустя 3 минуты, 51 секунда (1.09.2011 - 16:16) pavel24071988 написал(а):
Я ошибся в сообщении. В коде её нет. При нажатии на селект запись появляется, но через 2секунды селект самопроизвольно закрывается.

Спустя 4 минуты, 53 секунды (1.09.2011 - 16:20) ApuktaChehov написал(а):
Потому, что это IE. wink.gif

Спустя 1 минута, 57 секунд (1.09.2011 - 16:22) ApuktaChehov написал(а):
А чего вы сделать то хотите? Заполнять селекты по онклику - плохая не слишком удачная идея.

Спустя 3 часа, 43 секунды (1.09.2011 - 19:23) pavel24071988 написал(а):
-Действительно! Как я и сам не догадался про IE - он мне же не первый раз малину портит.
-да да да Я именно этого и хочу. Почему плохая идея? Сделать по загрузке страницы?

Спустя 2 часа, 10 минут, 52 секунды (1.09.2011 - 21:34) ApuktaChehov написал(а):
pavel24071988 - хоты бы потому, что в IE не работает wink.gif

Можно по загрузке страницы, но тогда смысла использовать JS вообще не вижу. Проще на пхп все сформировать.

Мне сложно судить, я не знаю, какая у вас задача стоит. Если список, который создается один раз на странице, тогда однозначно пхп. А если нужно что бы он динамически формировался по какому-либо событию, то нужно обработчик формирования списка вешать на это событие.

Спустя 10 часов, 24 минуты, 21 секунда (2.09.2011 - 07:58) pavel24071988 написал(а):
Список формируется один раз. Подскажите пожалуйста что значит
"Проще на пхп все сформировать."?

Я что то не очень понял как тут php можно использовать? Я думал что способ описанный мною выше - единственен.

Спустя 53 минуты, 23 секунды (2.09.2011 - 08:52) ApuktaChehov написал(а):
Эту самую страницу, случаем не php генерит? Если вы совсем php не используете, то тут конечно проще на js сделать. Тогда нужно формировать этот список вместе со страницей.

Спустя 13 минут, 8 секунд (2.09.2011 - 09:05) pavel24071988 написал(а):
Понял.
Страницу php не генерит.


Спустя 2 дня, 23 часа, 12 минут, 44 секунды (5.09.2011 - 08:18) pavel24071988 написал(а):
Вообщем, то что я хотел получилось. Вот код :

<body onload="f_selec()">
<select
name="select" id="select" onchange="f_blur()">
<option>
Выбрать все</option>
</select>


<script
type="text/javascript" language="javascript">
function
f_selec(){
for(i=0;i<100;i++){
var text = i;
var select = document.getElementById('select');
var newoption = document.createElement('option');
newoption.innerText = text;
select.appendChild(newoption);
}
}

function f_blur(){
var word = document.getElementById('select').value;
alert (word);
}
</script>



</body>



Значения "word" показывается из трех браузеров только в Opere и Mozille
В IE значения выбранного option(a) не показываются, а очень нучно что бы и этот браузер все отображал.

Я конечно понимаю что IE в топку!, но по задаче нужна его поддержка.

Помогите советом пожалуюся.

Спустя 1 час, 31 минута, 25 секунд (5.09.2011 - 09:49) ApuktaChehov написал(а):
Пробуем:
<body onload="f_selec()">
<
select name="select" id="select" onchange="f_blur(this);">
<
option>Выбрать все</option>
</
select>


<
script type="text/javascript" language="javascript">
function f_selec() {

var select = document.getElementById('select');
for(i = 0; i < 100; i++) {
var newoption = document.createElement('option');
newoption.setAttribute('value', i);

newoption.innerHTML = i;
select.appendChild(newoption);
}
}


function f_blur(obj){
alert (obj.value);
}
</script>



</
body>

Спустя 3 минуты, 3 секунды (5.09.2011 - 09:52) pavel24071988 написал(а):
Да, ловко это у Вас все получается
Спасибо!

Надо поближе познакомится с этим setAttribute...

Спустя 2 минуты (5.09.2011 - 09:54) ApuktaChehov написал(а):
pavel24071988 - ловкость рук и никакой магии wink.gif

Спустя 2 минуты, 52 секунды (5.09.2011 - 09:57) pavel24071988 написал(а):
Я тоже так хочу!

Спустя 59 секунд (5.09.2011 - 09:58) ApuktaChehov написал(а):
pavel24071988 - для этого нужно решать задачи, типа вашей. Решите их пару десятков и все станет очень просто и элементарно.

Спустя 4 минуты, 54 секунды (5.09.2011 - 10:03) pavel24071988 написал(а):
Вообщем спасибо.
очень помогаете!

Спустя 25 минут, 29 секунд (5.09.2011 - 10:28) moskitos80 написал(а):
Держи набросал на коленке, работает везде. Клиент:

<!DOCTYPE html>
<html lang="ru-RU">
<head>
<title>
Menu</title>
<script>

if
(typeof window.getRequest === "undefined")
{
function getRequest() {
var request = null;
try{ request = new XMLHttpRequest() }catch(e){};
try{ request = new ActiveXObject("Msxml2.XMLHTTP") }catch(e){};
try{ request = new ActiveXObject("Microsoft.XMLHTTP") }catch(e){};
return request;
}
}


window.onload = function()
{

(function (GLOBAL, Opt) {
'use strict';
var request = GLOBAL.getRequest(),
menu = GLOBAL.document.getElementById("menu"),
i = 0,
opt = null,
length = 0,
result = [];

if (request === null) {
GLOBAL.alert("Ваш браузер не поддерживает Ajax.");
}

request.open("GET", "server.php", true);

request.onreadystatechange = function (evt) {

if (request.readyState === 4 && request.status === 200) {
result = request.responseXML.documentElement.getElementsByTagName("option");

for (length = result.length; i < length; i += 1) {
opt = new Opt(result[i].firstChild.nodeValue, result[i].getAttribute("value"));
menu.options[i] = opt;
}
}
}
;
request.send(null);

}(this, Option));
}
</script>
</head>
<body>
<form
name="myform">
<select
id="menu"></select>
</form>

</body>
</html>



Сервер "server.php" :

<?php
header('Content-type: text/xml; charset=utf-8');

echo '<?xml version="1.0" encoding="utf-8"?>
<select>
<option value="1">One</option>
<option value="2">two</option>
<option value="3">three</option>
<option value="4">four</option>
</select>'
;
?>

Но по правильному, в рабочем приложении ещё нужно обрабатывать Ajax - ошибки и ещё ситуацию, если XML - имеет не правильный формат.

Спустя 1 час, 26 минут, 8 секунд (5.09.2011 - 11:54) pavel24071988 написал(а):
Вот за это спасибо, руки не доходили до этого что бы такой счетчик разобрать

length = result.length; i < length
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.