обновление списка select
Здравствуйте уважаемые знатоки :) прошу помощи в следующем вопросе...
есть селект <select name="filter" id="listFilter"> <option value="0" style="color: gray;">Seleziona...</option> <?=тут вывод option?> </select> и рядом с ним стоит такая вот кнопочка <a href="?do=update" onclick="updateSelect();"><img src="/ad/img/refresh.png" title="Обновить список" class="icon" /></a> мне нужно сделать чтоб по нажатию на эту кнопку селект обнавлялся без перезагрузки, я находил примеры в сети, НО, нулевой уровень знания явы не смог мне помочь разобраться пишу вам ... вот что я начинаю писать в файле явы function updateSelect() { Query.ajax ({ url:post.php, success:function(response) { $("#listFilter"). } }); } как закончить не знаю. заранее спасибо:) |
<a href="?do=update" onclick="updateSelect();return false"><img src="/ad/img/refresh.png" title="Обновить список" class="icon" /></a> А вообще, щелкнуть можно по чему угодно, просто по этой же картиночке, и тега А, который собственно не ради "жамкунть по чем нить" придумали, совсем не нужно. <img onclick="updateSelect()" src="/ad/img/refresh.png" title="Обновить список" class="icon" /> |
kiberchainik,
что возвращает сервер в response? |
хорошо, спасибо, я исправлю, но самый главный вопрос у меня был как сделать чтоб по нажатию селект обновлялся без перезагрузки!
|
вот что ...
function selectFiltri() { $this->Connect(); $select = mysql_query("select seo_name from filtri"); $arraySel = mysql_fetch_array($select); $num = mysql_num_rows($select); if ($num == "0") { echo"Фильтров еще нет"; } else { do { echo "<option value='".$arraySel['seo_name']."'>".$arraySel['seo_name']."</option>"; } while ($arraySel = mysql_fetch_array($select)); } } это обработчик |
Поместить ответ сервера в тело списка. А вот с чем вы работаете, это уже вам пояснять надо - если JSON, то строим по ним элементы списка не клиенте и помещаем в список, если готовый html, то замещаем им.
|
kiberchainik,
а json ? типа [{value : 0, text : "item1"},{value : 1, text : "item2"} ] тогда было бы значительно проще |
Цитата:
function updateSelect() { Query.ajax ({ url:post.php, success:function(response) { $("#listFilter").$this('html') } }); } |
kiberchainik,
$("#listFilter").append(response) |
Цитата:
|
kiberchainik,
<!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> select{ width: 200px; } </style> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script> $(function() { var response = [{value : 0, text : "test1"},{value : 1, text : "test2"} ] function success(arr) { $.each(arr, function( i,el) { $("<option/>", { text: el.text, value: el.value }).appendTo("#listFilter") }) } success(response) $("#listFilter").val(1); // test }); </script> </head> <body> <select name="" id="listFilter"> <option value="">item1</option> <option value="">item2</option> <option value="">item3</option> </select> </body> </html> |
Цитата:
Фильтр по английски - filter, а не filtri, ну отвыкайте вы от этого жаргона, полусмеси непонятно чего с чем. Функция mysql_fetch_array() без указания вторым аргументом типа возвращаемых данных, возвращает два идентичных набора, один индексный, второй ассоциативный. А вам это нужно? Зачем напрягать SQL пустыми задачами? Изучать, или эту использовать как необходимо, или именно ту, что возвращает необходимое (есть кроме нее). if ($num == "0")... вообще оригинально. И прежде чем проверять количество полученных рядов, нужно проверить удачно ли вообще завершился запрос, если ошибки SQL у вас не обрабатываются глобально. do ... while вообще не к месту. И где вы это только выкапываете, уже на стольких форумах эту пакость вижу, но до сих пор не знаю где вы ее черпаете. Коли html, значит изменить список выгоднее так: $("#listFilter").html('<option value="" style="color:gray">Seleziona...</option>'+response) PS. Изменил value="0", на value="", проверять не пустое ли проще будет, а такая проверка желательна. |
Цитата:
|
Да не исключено :)
|
:write:
<!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> select{ width: 200px; } </style> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script> $(function() { var response = '<option value="0">test1</option><option value="1">test2</option>'; function success(arr) { $(arr).appendTo("#listFilter") } success(response) $("#listFilter").val(1); // test }); </script> </head> <body> <select name="" id="listFilter"> <option value="">item1</option> <option value="">item2</option> <option value="">item3</option> </select> </body> </html> |
не получается :( :-/ :cray:
|
Цитата:
а насчет do ... while это все евгений попов виноват его школа )))) тогда у меня появляется второй вопрос или покажите как или натолкните на мануал, как данные из базы в простой массыв загнать и потом этот массив передать в ява обратно для вывода |
kiberchainik,
success:function(response) { $(response).appendTo("#listFilter") } если так не работает - покажите что в response на самом деле |
Цитата:
|
kiberchainik,
тогда убирайте вплытие по клику на ссылку |
kiberchainik,
function updateSelect(event) { event.preventDefault() |
я пойду с самого начала и по порядку...
1 есть хтмл <select name="filter" id="listFilter"> <option value="0" style="color: gray;">Seleziona...</option> <?=$query->selectFiltri()?> </select> <a href="?do=updateselect" onclick="updateSelect();return false"><img src="/ad/img/refresh.png" title="Обновить список" class="icon" /></a> по логике если я верно ее понимаю, после клика на ссылку рефреш мы отправляемся в этот скрипт function updateSelect() { Query.ajax ({ type:html, url:post.php, success:function(response) { alert(response); } }); } а он от себя посылает нас в файл пост.пхп где есть вот это чудо if ($_GET['do'] == "updateselect") { $query->selectFiltri(); } с этого файла, это самое чудо запускает функцию из класса обработчика в котором описано следующее заклинание function selectFiltri() { $this->Connect(); $select = mysql_query("select seo_name from filtri"); $arraySel = mysql_fetch_array($select); $num = mysql_num_rows($select); if ($num == "0") { echo"Фильтров еще нет"; } else { do { echo "<option value='".$arraySel['seo_name']."'>".$arraySel['seo_name']."</option>"; } while ($arraySel = mysql_fetch_array($select)); } } вот от всей этой волшебной сказки я ожидал результата а его нет! |
Перепишите этот, слов нет назвать классом, так:
$select = mysql_query("SELECT uid, seo_name FROM filter"); if($selec) { if(mysql_num_rows($select)) { while ($r = mysql_fetch_object($select)) $opt .= '<option value="'.$r->uid.'">'.$r->seo_name.'</option>'; echo $opt; } else //вывод сообщения об отсутствии записей в базе, и это должно как-то определяться в рамках единого диалога } else //действие - ошибка запроса Пояснение о uid. Ваш список в качестве и текста опций, и их значений использует одно и тоже - текст seo_name. Это не смертельно, но и не лучшее, что можно придумать. Я не знаю назначение вашего списка, но обычно такие вещи как-то связаны с другими таблицами, где этот список используется. И такая связь зачастую осуществляется посредством ID - уникальных идентификаторов. Уникальность достигается полем с автоинкрементом. Вот в моем запросе я как бы подразумеваю, что такой идентификатор есть и у вашего списка, именно его значение будет иметь опции в качестве значений, а не строки описания этого списка. Можете это удалить, но обдумайте прежде хорошо структуру своих данных. Как вставить этот html я уже показывал, а если не получается, то проверяйте запросы, передается ли $_GET['do'] == "updateselect", GET ли метод у вашего запроса и т.п. PS. Тут тема уже не поянть что к чему ) Как в массив строки из базы, а не в html? Вместо этого: while ($r = mysql_fetch_object($select)) $opt .= '<option value="'.$r->uid.'">'.$r->seo_name.'</option>'; echo $opt; это: while ($r = mysql_fetch_assoc($select)) $opt[] = $r; echo json_encode($opt); Если скрипт пишется под РНР версию не ниже 5.4, то можно использовать опцию JSON_UNESCAPED_UNICODE в json_encode(). |
Цитата:
|
все правки сделаны, работать работает а вот обновлять без перезагрузки хоть убей не хочет (((
function updateSelect(event) { event.preventDefault();//отмена действия клик Query.ajax ({ type:'html', url:'post.php', success:function(response) { $("#listFilter").html(response); } }); } |
Работает что и как вы определили это, если перегружается, а не должно?
Вам показывали два способа предотвращения действия по умолчанию элемента и вы их кучей используете, а не работает? Самый правильный же, это выбросить тег А из кода, в данном случае он вообще не к месту. Для чего он у вас? Для хранения "do=updateselect"? Ну вроде бы как список у вас один, параметр запроса ключ-значение вам никто не мешает прописать сразу в методе .ajax(). Может потому, что при теге А "красивую ручку" курсор имеет? Открываем CSS и прописываем классу icon стиль курсора pointer, и :hover тоже не проблема. Выбрасывайте и проверяйте, будут ошибки теперь, анализируйте их, иначе гадание. |
Цитата:
<img src="/ad/img/refresh.png"onclick="updateSelect();return false;" title="Обновить список" class="icon" /> function updateSelect() { $.get ({ type:'html', url:'post.php?do=update', success:function(response) { $("#listFilter").html(response); } }); } |
Нет не знаете, вы копируете то, что вам пишут, но вряд ли анализируете это. Вот попробуйте перейти по этой ссылке:
Код:
<a href="http://javascript.ru/forum/" onclick="return false">GO</a> Читайте здесь еще, пробуйте, будете задумываться над тем, что делаете, обязательно будет работать. |
Цитата:
там уже несколько другая идея, с прошлым вопросом разобрался! |
большое спасибо я разобрался можно закрыть тему ))):dance:
|
Часовой пояс GMT +3, время: 07:57. |