Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Динамический select

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: не работает в IE
demot
Отправлено: 19 Мая, 2011 - 14:47:45
Post Id


Частый гость


Покинул форум
Сообщений всего: 143
Дата рег-ции: Окт. 2010  


Помог: 3 раз(а)




Есть такой фреймворк (наверное можно так назвать) JsHttpRequest.
Пробую делать динамически подгружаемый select из БД по результатам выбора 1-го select'a.

frontend
CODE (html):
скопировать код в буфер обмена
  1. <html><head><title>Specialists</title>
  2. <script src="./lib/JsHttpRequest/JsHttpRequest.js"></script>
  3. <script language="JavaScript">    
  4.     function load_select() {
  5.         JsHttpRequest.query(
  6.             'dinamic_list.php',
  7.             {
  8.                 'list': document.getElementById("list").value
  9.             },
  10.             function(result) {
  11.                 if (result) {document.getElementById("ans").innerHTML = result["list"];}
  12.             },
  13.             true
  14.         );
  15.     }
  16. </script>
  17. </head><body onLoad="load_select()">
  18.        
  19. <form method="post">
  20. <select id="list" onchange="load_select()">
  21.     <option>group1</option>
  22.     <option>group2</option>
  23.     <option>group3</option>
  24. </select>
  25. <select id="ans"></select>
  26. </form>
  27.  
  28.  
  29. </body></html>


backend
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. require_once "./lib/JsHttpRequest/JsHttpRequest.php";
  3. require_once './inc/db.con.php';
  4. $JsHttpRequest =& new JsHttpRequest("utf-8");
  5.  
  6. $group = $_REQUEST['list'];
  7.  
  8. $list .= '<option>-- нет --</option>';
  9. $sql = "SELECT name FROM `specialists` WHERE `group`='".$group."' ORDER BY name ASC;";
  10. $result = mysql_query($sql);
  11. while ($data = mysql_fetch_assoc($result)){
  12. $list .= '<option>'.$data['name'].'</option>';
  13. }
  14.     $GLOBALS['_RESULT'] = array(
  15.       "list"   => $list
  16.     );
  17.  
  18. ?>


Так вот в чем суть проблемы. Во всех браузерах перепробывал, все работает нормально. В IE - ни в какую... Т.к. сам в JS полный ноль, то прошу не ругаться на код (делал по примеру) и подсказать как решить проблему с IE (проверял на версиях 7,8,9 - не работает).

(Отредактировано автором: 19 Мая, 2011 - 14:48:37)

 
 Top
demot
Отправлено: 20 Мая, 2011 - 11:03:19
Post Id


Частый гость


Покинул форум
Сообщений всего: 143
Дата рег-ции: Окт. 2010  


Помог: 3 раз(а)




Ну что, не у кого нет идей?

Или может подскажите как из массива, отдаваемого PHP, собрать select с помощью js
 
 Top
Viper
Отправлено: 20 Мая, 2011 - 12:03:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




причем тут массив из php к js?
php-скриптом отдавайте json и в js-скрипте его парсите и производите нужные действия.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
komprenda
Отправлено: 20 Мая, 2011 - 12:07:38
Post Id


Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Май 2011  


Помог: 3 раз(а)




demot пишет:
Ну что, не у кого нет идей?

Или может подскажите как из массива, отдаваемого PHP, собрать select с помощью js


так XMLHttpRequest не раблтает в ишаке, у него другая модель используется там ActiveXObject
(Добавление)
а хотя нет
Цитата:

Библиотека использует JavaScript (ActiveX, DOM и XMLHttpRequest, если последний доступен)

значит должно работать
(Добавление)
Это старая библиотека, которой уже никто не пользуется, СКАЧАЙ jquery
 
 Top
Viper
Отправлено: 20 Мая, 2011 - 12:14:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




komprenda вы правы, но несколько в другом направлении.
Поискал что это за "фреймворк" такой. http://dklab[dot]ru/lib/JsHttpRequest/ как оказалось. Собстно ничего удивительного нет в том что оно не работает, когда видишь автора этого "фреймворка".

demot посмотрите все же в сторону jQuery. Оно и проще и api описано и примеров валом и работает в 99% браузеров.

ЗЫ! Кстати зачем вешать load_select() на onload в body? Если для того чтобы предзагрузку делать, то лучше первый список статиком делать, а остальные дергать ajax'ом.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
demot
Отправлено: 20 Мая, 2011 - 13:18:55
Post Id


Частый гость


Покинул форум
Сообщений всего: 143
Дата рег-ции: Окт. 2010  


Помог: 3 раз(а)




Viper пишет:
Т.к. сам в JS полный ноль

Это комментарий к вашему посту Подмигивание
demot пишет:
Т.к. сам в JS полный ноль, то прошу не ругаться на код (делал по примеру)

Попробовал еще так (после отправки запроса dinamic_list.php возвращает строку, которую потом преобразую в массив с момощью JS)
CODE (javascript):
скопировать код в буфер обмена
  1.     function load_select() {
  2.         JsHttpRequest.query(
  3.             'dinamic_list.php',
  4.             {
  5.                 'list': document.getElementById("list").value
  6.             },
  7.             function(result) {
  8.                 if (result) {
  9.                     var specList = document.forms["selform"].elements["specialists"];
  10.                     var listValues = result["list"].split(",");
  11.                     var listValuesCnt = listValues.length;
  12.                    
  13.                     for (i = 0; i < listValuesCnt; i++){
  14.                             var newValueListOption = document.createElement("OPTION");
  15.                             newValueListOption.text = listValues[i];
  16.                             newValueListOption.value = listValues[i];
  17.                             // тут мы используем для добавления элемента либо метод IE, либо DOM, которые, alas, не совпадают по параметрам…
  18.                             (specList.options.add) ? specList.options.add(newValueListOption) : specList.add(newValueListOption, null);
  19.                     }
  20.                 }
  21.             },
  22.             true
  23.         );
  24.     }

CODE (html):
скопировать код в буфер обмена
  1. <form method="post" name="selform">
  2. <select id="list" onchange="load_select()">
  3.     <option>group1</option>
  4.     <option>group2</option>
  5.     <option>group3</option>
  6. </select>
  7. <select name="specialists" ></select>
  8. </form>


И опять же, во всех браузерах работает, кроме IE.
 
 Top
Viper
Отправлено: 20 Мая, 2011 - 14:42:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




demot воспользуйтесь jQuery. Будут вопросы поможем.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
demot
Отправлено: 20 Мая, 2011 - 15:32:25
Post Id


Частый гость


Покинул форум
Сообщений всего: 143
Дата рег-ции: Окт. 2010  


Помог: 3 раз(а)




Viper пишет:
demot воспользуйтесь jQuery.

Да, спасибо, как раз попробовал уже. И все сразу заработало Улыбка

правда появился другой вопрос.
почему с таким кодом все отрабатывает отлично
CODE (javascript):
скопировать код в буфер обмена
  1. $("#list").change(function(){
  2.         $("#spec").load("dinamic_list.php", { list: $("#list option:selected").val() });
  3. });
  4.    
  5. $(document).ready(function(){
  6.         $("#spec").load("dinamic_list.php", { list: $("#list option:selected").val() });
  7. });


а с таким нет, т.е. ready отрабатывает, а change не работает
CODE (javascript):
скопировать код в буфер обмена
  1. function loadList(){
  2.         $("#spec").load("dinamic_list.php", { list: $("#list option:selected").val() }
  3. )};
  4. $(document).ready(loadList());
  5. $("#list").change(loadList());

(Добавление)
Поменял на код ниже и заработало.
CODE (javascript):
скопировать код в буфер обмена
  1. $("#list").bind('change',loadList);

Ну тогда уже из чисто "спортивного интереса", почему все-таки не работает
CODE (javascript):
скопировать код в буфер обмена
  1. $("#list").change(loadList());
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB