Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2017, 22:50   #1
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 111
Вопрос Вывод списка по клику

Здравствуйте, пытаюсь реализовать следующее: по нажатию на элемент списка вывести еще один список, соответствющий выбранному элементу.
Это код списка, который есть изначально.
Код:
<ul >
            <span class="tree">
        <?php  
            $query=$db->query("SELECT  * FROM `dbdeviceuniversalitem` WHERE `ParentType`=59");
            while ($row=$query->fetch())
            {
            echo "<li><span value='{$row->ID}'>".$row->Name."</span></li>";
            }
        ?>
            </span>
        </ul>
Сюда типа должен выводиться список после нажатия
Код:
<span class="list">
 
    </span>
Скрипт:
Код:
<script type="text/javascript">
            $(function(){
                var ID=$(".tree").val(); 
                $.ajax({
                        type:"POST",
                        url:"command2.php",
                        data:{ID:ID},
                        success:function(data){
                            $(".list").html(data);
                        }
                    });
 
                $(".tree").click(function(){
                    var ID=$(".tree").val();
 
                    $.ajax({
                        type:"POST",
                        url: "command2.php",
                        data:{ID:ID},
                        success:function(data){
                            $(".list").html(data);
                        }
                    });
                });
            });
        </script>
command2.php
Код:
<?php
require_once 'connection.php';
if (isset($_POST['ID'])&& !empty($_POST['ID']) ){
    $ID=intval($_POST['ID']);
    $query =$db->query("SELECT * FROM `dbobjectmainclass` WHERE `MainID_Ref`=$ID");
        echo "<select size='15' name='list'>";
        echo "<option value='0'>Выберите объект</option>";
    while ($row = $query->fetch()) {
        echo "<option >{$row->Name}</option>";
    }
    echo "</select>";
}else{
    echo "<option value='0' disabled>Выберите объект</option>";
}
 
?>
По клику список не формируется и срабатывает условие, else в command2.php:
Код:
else{
    echo "<option value='0' disabled>Выберите объект</option>";
}
Нужна помощь
Kef1r вне форума Ответить с цитированием
Старый 04.11.2017, 23:51   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Kef1r Посмотреть сообщение
Код:
<ul >
            <span class="tree">
        <?php  
            $query=$db->query("SELECT  * FROM `dbdeviceuniversalitem` WHERE `ParentType`=59");
            while ($row=$query->fetch())
            {
            echo "<li><span value='{$row->ID}'>".$row->Name."</span></li>";
            }
        ?>
            </span>
        </ul>
...
Скрипт:
Код:
var ID=$(".tree").val();
У элементов типа span, ul, div, etc... – у них в принципе не может быть атрибута value, значение которого ты пытаешься поймать через .val() и отправить на сервер.
Поэтому, через .val() ты получаешь ничего – и это самое ничего передаёшь на сервер, который и реагирует соответственно.
В консоли браузера, скорее всего, есть замечания по этому поводу – иногда полезно туда заглядывать, а также выводить туда для проверки значения переменных, если в процессе разработки что-то идёт не так (console.log(var_name)).
Andkorol вне форума Ответить с цитированием
Старый 05.11.2017, 00:17   #3
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 111
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
В консоли браузера, скорее всего, есть замечания по этому поводу – иногда полезно туда заглядывать, а также выводить туда для проверки значения переменных, если в процессе разработки что-то идёт не так .
Спасибо большое, теперь хоть понятно, в консоли ошибок небыло, иначе я бы разобрался быстрее.
Теперь хочу спросить, у каких элементов кроме select и button есть атрибут value?
Или может быть есть какой-то другой выход из этой ситуации?)
Kef1r вне форума Ответить с цитированием
Старый 05.11.2017, 00:21   #4
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 111
По умолчанию

Еще интересное наблюдение: Если отправлять в атрибут value элемента span строковое значение, то оно таки туда присваивается. Например я присвоил значение столбца Name
Код:
<span value='{$row->Name}'></span>
.
А если числовое, как я пытался ID и другие, то ничего не присваивается.
Kef1r вне форума Ответить с цитированием
Старый 05.11.2017, 00:28   #5
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Задать элементу списка id, который будет содержать нужное для передачи на сервер значение в той или иной форме (например: <span id="tree_{$row->ID}">).
Затем отслеживать клик по этим элементам – и передавать на сервер id текущего (this.id).
Ну а на сервере уже извлекать из "tree_{$row->ID}" собственно нужную часть строки.
Можно и сразу на клиенте извлечь – при помощи split, и на сервер передавать уже «чистый» ID.
Можно data-* атрибуты использовать.
Варианты есть.
Andkorol вне форума Ответить с цитированием
Старый 05.11.2017, 01:52   #6
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 111
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Варианты есть.
В общем попробовал я и так и сяк, но наверное в силу своей неопытности/незнания ничего не вышло.
Если вас не затруднит, то, пожалуйста, напишите конкретный пример по одному из вариантов.
Kef1r вне форума Ответить с цитированием
Старый 05.11.2017, 03:38   #7
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Попытки в студию.
Andkorol вне форума Ответить с цитированием
Старый 05.11.2017, 11:48   #8
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 111
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Попытки в студию.
Пробовал вот так. PHP:
Код:
<ul class="tree">
          
        <?php  
            $query=$db->query("SELECT DISTINCT `Name` FROM `dbdeviceuniversalitem` WHERE `ParentType`=59");
            while ($row=$query->fetch())
            {
            echo "<li ><span id='{$row->ID}'>".$row->Name."</span></li>";
            }
        ?>
 
         </ul>
Script:
Код:
$(".tree li span").click(function(){
    var ID=$(this).attr("id");

    $.ajax({
        type:"POST",
        url: "command2.php",
        data:{ID:ID},
        success:function(data){
            $(".list").html(data);
        }
    });
})
Но так даже не выполняется событие click().
Kef1r вне форума Ответить с цитированием
Старый 05.11.2017, 12:11   #9
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Kef1r Посмотреть сообщение
Но так даже не выполняется событие click().
Я ж надеюсь, ты догадался по своему предыдущему коду, что код обработки события click нужно заключить в:
jQuery(document).ready(function($){ });
или
$(function(){ });
?
Всё там нормально выполняется: http://jsfiddle.net/1hywce8s/
Andkorol вне форума Ответить с цитированием
Старый 05.11.2017, 12:18   #10
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 111
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Всё там нормально выполняется
Да, это я заметил, но тут дело опять в том, что ID не передается в command2.php

Вот, если что, полный код на данный момент:
PHP:
Код:
<ul class="tree">
          
        <?php  
            $query=$db->query("SELECT DISTINCT `Name` FROM `dbdeviceuniversalitem` WHERE `ParentType`=59");
            while ($row=$query->fetch())
            {
            echo "<li ><span id='{$row->ID}'>".$row->Name."</span></li>";
            }
        ?>
 
        </ul>
Script:
Код:
$(function(){
$(".tree li span").click(function(){
    var ID=$(this).attr("id");

    $.ajax({
        type:"POST",
        url: "command2.php",
        data:{ID:ID},
        success:function(data){
            $(".list").html(data);
        }
        });
    });
 });
command2.php:
Код:
<?php
require_once 'connection.php';
if (!empty($_POST['ID']) ){
    echo $_POST['ID'];
}
if (isset($_POST['ID'])&& !empty($_POST['ID']) ){
    $ID=intval($_POST['ID']);


    $query =$db->query("SELECT * FROM `dbobjectmainclass` WHERE `MainID_Ref`=$ID");
        echo "<select size='15' name='list'>";
        echo "<option value='0'>Выберите объект</option>";
    while ($row = $query->fetch()) {
        echo "<option >{$row->Name}</option>";
    }
    echo "</select>";
}else{
    echo "<option value='0' disabled>Выберите объект</option>";
}

?>
По прежнему выполняется условие else в command2.php
Хелп)

Последний раз редактировалось Kef1r; 05.11.2017 в 12:28.
Kef1r вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод элементов выпадающего списка. Ankumo JavaScript, Ajax 5 11.07.2016 15:43
Вывод списка на экран Kir94 Паскаль, Turbo Pascal, PascalABC.NET 6 16.10.2015 22:06
Вывод списка символов справа налево 5 раз подряд и исключить вывод цифр Gareek Помощь студентам 2 23.12.2011 21:41
DBcomboBox и вывод списка andrenisimus БД в Delphi 4 28.10.2010 16:33
С# вывод списка файлов в директории Айат Помощь студентам 3 28.11.2009 11:43