За последние 24 часа нас посетили 16935 программистов и 1632 робота. Сейчас ищут 677 программистов ...

Как передать значение в input из модального окна?

Тема в разделе "PHP для новичков", создана пользователем GoSou, 6 май 2017.

  1. GoSou

    GoSou Новичок

    С нами с:
    6 май 2017
    Сообщения:
    37
    Симпатии:
    3
    Всем здравствуйте!
    Есть такая задача: из модального окна нужно передать значение в input. Имеется решение, которое работает великолепно:


    /* index.php */
    Код (Javascript):
    1. <script language="JavaScript">
    2. function changeBut(nam) {
    3. document.forms[0].form_color.value = nam;
    4. }
    5. </script>
    PHP:
    1. <div class="container">      
    2. <form>
    3. <input type=text name=form_color onClick='window.open("popup.php", "modal", "width=500, height=100");'>
    4. </form>
    5. </div>
    /* popup.php */
    PHP:
    1. <html>
    2. <body>
    3.  
    4. <form name=modal_color>
    5. <center>
    6.         <table border=2 cellspacing=5 width=75%>
    7.         <tr width=35px height=35px>
    8.  
    9.             <td bgcolor=#ff0000><img src=clear.png width=100% height=100% onClick="window.opener.changeBut(document.modal_color.value='Красный'); self.close();" title="Красный"></td>
    10.            <td bgcolor=#ff9b00><img src=clear.png width=100% height=100% onClick="window.opener.changeBut(document.modal_color.value='Оранжевый'); self.close();" title="Оранжевый"></td>
    11.            <td bgcolor=#fff000><img src=clear.png width=100% height=100% onClick="window.opener.changeBut(document.modal_color.value='Жёлтый'); self.close();" title="Жёлтый"></td>
    12.            <td bgcolor=#32af00><img src=clear.png width=100% height=100% onClick="window.opener.changeBut(document.modal_color.value='Зелёный'); self.close();" title="Зелёный"></td>
    13.            <td bgcolor=#00b4ff><img src=clear.png width=100% height=100% onClick="window.opener.changeBut(document.modal_color.value='Голубой'); self.close();" title="Голубой"></td>
    14.            <td bgcolor=#0064ff><img src=clear.png width=100% height=100% onClick="window.opener.changeBut(document.modal_color.value='Синий');    self.close();" title="Синий"></td>
    15.            <td bgcolor=#a200ff><img src=clear.png width=100% height=100% onClick="window.opener.changeBut(document.modal_color.value='Фиолетовый'); self.close();" title="Фиолетовый"></td>
    16.  
    17.         </tr>
    18.         </table>
    19.     </center>
    20.  
    21. </form>
    22. </body>
    23. </html>
    Всё бы ничего, да только есть одно НО – модальное окно открывается в браузере как второе Windows-окно отдельным файлом . Необходимо сделать практически то же самое, но чтобы модальное окно реализовывалось одним файлом на DIV'ах. Есть такой нерабочий вариант:


    Код (Javascript):
    1. <script language="JavaScript">
    2. function changeBut(nam) {
    3. document.forms[0].form_color.value = nam;
    4. }
    5. </script>
    PHP:
    1. <div class="container">      
    2. <form>
    3. <input type="text" name="form_color" onClick="getElementById('win').removeAttribute('style');" value="" />
    4. <div id="win" style="display: none;">
    5.       <div class="visible">
    6.           <div class="content">
    7.      <center>
    8.         <table border=2 cellspacing=5 width=75%>
    9.         <tr width=25px height=25px>
    10.  
    11.             <td bgcolor=#ff0000><img src=clear.png width=100% height=100% onClick="getElementById('win').style.display='none';" title="Красный"></td>
    12.            <td bgcolor=#ff9b00><img src=clear.png width=100% height=100% onClick="getElementById('win').style.display='none';" title="Оранжевый"></td>
    13.            <td bgcolor=#fff000><img src=clear.png width=100% height=100% onClick="getElementById('win').style.display='none';" title="Жёлтый"></td>
    14.            <td bgcolor=#32af00><img src=clear.png width=100% height=100% onClick="getElementById('win').style.display='none';" title="Зелёный"></td>
    15.            <td bgcolor=#00b4ff><img src=clear.png width=100% height=100% onClick="getElementById('win').style.display='none';" title="Голубой"></td>
    16.            <td bgcolor=#0064ff><img src=clear.png width=100% height=100% onClick="getElementById('win').style.display='none';" title="Синий"></td>
    17.            <td bgcolor=#a200ff><img src=clear.png width=100% height=100% onClick="getElementById('win').style.display='none';" title="Фиолетовый"></td>
    18.        </tr>
    19.         </table>
    20.     </center>
    21.           </div>
    22.     </div>
    23. </div>
    24.  
    25. </form>
    26. </div>
    При клике на input модальное окно открывается и при нажатии на любой цвет оно успешно закрывается, однако этого недостаточно. Прошу уважаемое сообщество особо тапками не кидаться, но действительно что-то никак не соображу куда нужно «повесить» value с соответствующим названием цвета, чтобы каким-то образом сие значение передавалось в input. Понимаю, что это не особо сложно, ну вот упёрся в тупик и – никак... Подскажите, пожалуйста.

    Заранее всем ответившим СПАСИБО !!!
     
  2. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    Создаешь div с position:absolute; выставляешь куда надо,
    наполняешь контентом и прописываешь ему класс (например class="disp").
    В css прописываешь этому классу display:none;
    И при клике куда надо удаляешь этот класс.
    В верхний правый угол буковку "X" (типа закрыть)
    И при клике по "Х" этот класс добавляешь.
    При выборе чего-то там в этом DIV аналогично, класс удаляешь и получаешь нужное тебе значение и вставляешь куда надо.

    Если что-то непонятно - спрашивай.
     
  3. GoSou

    GoSou Новичок

    С нами с:
    6 май 2017
    Сообщения:
    37
    Симпатии:
    3
    TeslaFeo, благодарю за ответ! Честно говоря, он мне понятен и непонятен одновременно. С момента публикации своего сообщения я не сидел сложа руки в ожидании готового решения, а неистово гуглил Интернет. Кое-что раскопал, сейчас вкупе с твоим ответом буду кумекать дальше. О результатах отпишусь позже.
     
  4. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    КрасСаФчеГ
     
  5. GoSou

    GoSou Новичок

    С нами с:
    6 май 2017
    Сообщения:
    37
    Симпатии:
    3
    В принципе, решение уже найдено давно, не было времени здесь отписаться. Итак, моё модальное окно представлено на иллюстрации ниже. Вместо буковки Х в углу (типа закрыть) я сделал кнопку Отмена. Принцип тот-же – попросту закрывает модальное окно без внесения какого-либо значения в input. При клике на любой цветной квадратик модальное окно также автоматически скрывается и в input заносится название соответствующего цвета. Как раз то, что мне и требовалось!
    Реализовано сие действие следующим образом:

    Код (Javascript):
    1. <script language="JavaScript">
    2. function changeBut(nam) {
    3. document.forms[0].form_color.value = nam;
    4. }
    5.    
    6. function innerHTML(newTXT){
    7.     var elem = document.getElementById("form_color");
    8.     elem = newTXT;
    9. }
    10. </script>
    PHP:
    1. <li><img src=images/color_blue.png onClick="getElementById('win').style.display='none'; document.getElementById('form_color').value = 'Синий';" title="Синий"></li>
    По другим цветам всё аналогично и нет смысла их все тут публиковать.
    Табличную вёрстку заменил на список. В остальном PHP-листинг остался прежним и его можно посмотреть в моём первом сообщении.
    Вероятно, есть более лаконичный код, который бы одновременно и закрывал (скрывал) модальное окно, и вносил в input значение (название) выбранного цвета. Буду рад консультациям опытных коллег.
     

    Вложения:

  6. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    Прописанные цвета будут быстрее грузиться, чем картинки для каждого цвета.
    Посему будет лучше прописать бакграунд каждому квадратику :)
    --- Добавлено ---
    и градиенты тоже возможно сделать, и полосатые эти бакграунды тоже...
    --- Добавлено ---
    Вот тут мега подробно о градиентах.
     
    GoSou нравится это.
  7. GoSou

    GoSou Новичок

    С нами с:
    6 май 2017
    Сообщения:
    37
    Симпатии:
    3
    TeslaFeo, спасибо за ссылку – сохранил её себе, обязательно буду штудировать материал и применять новые знания в своём сайте. Действительно, поначалу у меня цвета были представлены как бакграунды, но впоследствии перешёл на картинки из-за последней колонки в модальном окне.
     
  8. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    @GoSou всё, что в последней колонке можно реализовать без картинок.
     
    GoSou нравится это.
  9. GoSou

    GoSou Новичок

    С нами с:
    6 май 2017
    Сообщения:
    37
    Симпатии:
    3
    Мне это интересно, обязательно буду экспериментировать. О результатах отпишусь позже. И – ещё раз Вам СПАСИБО за указание более правильного пути в веб-программировании.