Как сделать так, чтобы модальное значение получалось из кнопки через некоторое время

#javascript #php #html

Вопрос:

Я написал цикл while, в котором отображалась картинка, которую я сохранил, и я хочу, чтобы, когда пользователь нажимает кнопку на картинке, появлялся модал с изображением в нем. Это код, который я написал для отображения продуктов, и когда он нажимает кнопку, затем «onclick», он устанавливает сеанс, в котором я сохраняю изображение изображения и отображаю его в модальном режиме, но это не работает. Он делает только последнее отображаемое изображение. Как мне сделать так, чтобы отображалась выбранная мной картинка?

 <?php
$query_name="SELECT * FROM products WHERE active='1' ";
$result =  mysqli_query($conn, $query_name);
while($rows=mysqli_fetch_assoc($result))
{
    ?>

    <div class="block2">
        <div class="block2-pic hov-img0">
            <img  src="img/<?php echo $rows['picture']; ?> " alt="">

            <button href="#" onclick="<?php $_SESSION['what_picture']=$rows['picture']; ?>" class="block2-btn flex-c-m stext-103 cl2 size-102 bg0 bor2 hov-btn1 p-lr-15 trans-04 js-show-modal1">
                Quick View
            </button>
        </div>

            
    </div>

<?php } ?>
 

Это модальный

 <div class="wrap-modal1 js-modal1 p-t-60 p-b-20">
    <div class="overlay-modal1 js-hide-modal1"></div>

    <div class="container">
        <div class="bg0 p-t-60 p-b-30 p-lr-15-lg how-pos3-parent">
            <button class="how-pos3 hov3 trans-04 js-hide-modal1">
                <img src="images/icons/icon-close.png" alt="CLOSE">
            </button>

            <div class="row">
                <div class="col-md-6 col-lg-7 p-b-30">
                    <div class="p-l-25 p-r-30 p-lr-0-lg">
                        <div class="wrap-slick3 flex-sb flex-w">
                            <div class="wrap-slick3-dots"></div>
                            <div class="wrap-slick3-arrows flex-sb-m flex-w"></div>

                            <div class="slick3 gallery-lb">
                                <div class="item-slick3" data-thumb="images/product-detail-01.jpg">
                                    <div class="wrap-pic-w pos-relative">
                                        <img src="img/<?php echo $_SESSION['what_picture']; ?>" alt="IMG-PRODUCT">

                                        <a class="flex-c-m size-108 how-pos1 bor0 fs-16 cl10 bg0 hov-btn3 trans-04" href="images/product-detail-01.jpg">
                                            <i class="fa fa-expand"></i>
                                        </a>
                                    </div>
                                </div>

                                
                            </div>
                        </div>
                    </div>
                </div>
                
                
            </div>
        </div>
    </div>
</div>
 

Комментарии:

1. Весь PHP запускается на сервере до того, как что-либо будет отправлено клиенту. Цикл каждый раз перезаписывает переменную сеанса. Вам нужно использовать AJAX, если вы хотите нажать на что-то, чтобы обновить переменную PHP.

2. Вы используете JavaScript vanilla или jQuery сделайте так, чтобы я мог набросать для вас код

3. @Бармар, как мне это сделать

Ответ №1:

Вы должны сделать ajax для целевого элемента и показать в модели

Ответ №2:

Ошибка, которую вы совершаете здесь, находится по этой ссылке

 onclick="<?php $_SESSION['what_picture']=$rows['picture']; ?>"
 

Проблема здесь в том, что в атрибуте onclick вы не вызываете какую-либо функцию JavaScript. Что вам нужно, чтобы исправить это, так это вызвать функцию с $rows[‘picture’] в качестве параметра для нее.

Напр.

 onclick="setModelPicture(<?php echo $rows['picture']; ?>)"
 

В дополнение к этому, вам нужно сделать 2 вещи.

  1. Дайте «идентификатор» изображению, на которое мы хотим нацелиться

идентификатор img = «динамическая модель изображения» alt=»IMG-ПРОДУКТ»

  1. Необходимо определить следующую функцию JavaScript, чтобы установить изображение внутри модели в соответствии с тем, что вы передаете в функцию setModelPicture.
 function setModelPicture(picture){
   document.getElementById("dynamic-model-picture").src = picture;
}
 

В приведенном выше сценарии всякий раз, когда пользователь нажимает на изображение, путь к изображению (я полагаю, что он находится в строках $[«изображение»]) передается в функцию setModelPicture, и оттуда он обновляет атрибут src изображения.

Комментарии:

1. Я написал <img id=»динамическая модель-картинка» src=»img/<?php echo $строки[‘картинка’]; ?> » alt=»»<?php echo $строки[‘картинка’]; ?>> <?php echo $строки[‘картинка’]; ?>><кнопка href=»#» onclick=»setModelPicture(<?php echo $строки[‘картинка’]; ?>)» класс=»размер блока2-btn flex-c-m stext-103 cl2-102 bg0 bor2 hov-btn1 p-lr-15 trans-04 js-show-modal1″<?php echo $строки[‘картинка’]; ?>> Быстрый просмотр <?php echo $строки[‘картинка’]; ?>></кнопка> и в конце кода я добавил предоставленный вами скрипт, что теперь я должен написать в img-путь модального?

2. @demetris Изначально вам не нужно задавать путь к изображению элемента img внутри модели. Что должно произойти, так это то, что всякий раз, когда пользователь нажимает кнопку «Быстрый просмотр», это вызовет функцию setModelPicture и отправит путь к изображению в качестве параметра. Внутри функции он установит атрибут изображения «src» внутри модели для просмотра изображения. В вашей кнопке вы должны заключить путь к изображению в кавычки. Например, <кнопка href=»#» onclick=»setModelPicture(‘<?php echo $строки[‘картинка’]; ?>’)»…