Изменить элементы формы в зависимости от выбранного параметра - PullRequest
0 голосов
/ 16 января 2012

Я видел несколько сайтов, где есть форма, начинающаяся с раскрывающегося списка, и в зависимости от выбранного поля есть разные элементы формы, например, скажем, я хотел создать скрипт загрузки, раскрывающийся список может содержать:

Upload
Delete

И выбрано «Выгрузка». Я бы хотел просмотреть элемент файла, в то время как при выборе «Удалить» может быть только имя должно быть введено в текстовое поле.Как я могу заставить это сделать это?Я планирую использовать для него php и использовать синтаксис echo для создания html для форм, но есть способ получить, например, if if, который изменяет другие элементы формы, которые отображаются в зависимости от выбранной опции.

Я видел, как люди используют для этого jQuery, но я могу использовать ТОЛЬКО PHP-объявление и HTML для моего проекта.

Ответы [ 4 ]

3 голосов
/ 16 января 2012

Это не прямое решение, но если вы намерены выполнять эту задачу исключительно с помощью php / html, вам следует подумать о настройке такой системы в файле php, который обслуживает страницу.

<?php

/*Check to see if the user has submitted the form*/
if(isset($_POST['action']))
    $action = $_POST['action'];

/*If no action has been sent from the client side, generate form*/
if(!isset($action)){ ?>
    <form name="test" action="example.php" method="POST">
        <select name="action">
            <option value="update">Update</option>
            <option value="delete">delete</option>
        </select>
    </form>
<?}

/* if update action, load file dialog*/
elseif($action == "update"){?>
    <!-- relevant HTML or action for file load -->
<?}

/*Default to delete*/
else{?>
    <!-- some action to place the input field -->
    <input name="fileName" value="<? echo $FILE_NAME; ?>" />
<?}
?>

По сути, вам придется обрабатывать как страницы, так и формы на одной странице, используя значение из элемента выбора формы, чтобы определить, какие блоки HTML необходимо загрузить. Обратите внимание, что вам все равно придется предоставить кнопку отправки для формы, чтобы вызвать действие, так как нет событий javascript.

Я хочу дистанцироваться от этого решения, поскольку знаю об этом только через переживание эффекта Даннинга Крюгера, и я уверен, что отсутствие участия со стороны клиента будет осуждено большинством.

1 голос
/ 16 января 2012

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

У сайтов, которые я видел, которые делают подобные вещи при перезагрузке на стороне сервера, обычно есть начальная страница, где вы выбираете нужное действие, а затем загружаете форму для выбранного действия. Это действительно все, что вы можете сделать без какого-либо javascript на стороне клиента.

Если вы можете использовать javascript, тогда у вас есть много вариантов:

  1. Запустить перезагрузку формы при изменении раскрывающегося списка.
  2. Отправьте запрос ajax при изменении раскрывающегося списка и динамически добавьте HTML, возвращенный сервером, в форму.
  3. Отправьте поля для всех параметров на исходной странице и используйте событие изменения в раскрывающемся списке, чтобы показать / скрыть соответствующие поля.

Судя по вашим комментариям к другим ответам, возникает некоторая путаница относительно роли javascript в приложении. Серверу не нужно знать о Javascript или даже JQuery. Сервер запускает ваш код PHP для создания HTML-кода для вашей страницы. HTML может ссылаться на таблицы стилей CSS, изображения, файлы Javascript и т. Д., Которые, с точки зрения сервера, являются просто статическими файлами, запрашиваемыми браузером. Как только клиентский браузер получает файл javascript с сервера, он может выполнить его и включить любое поведение страницы dynmiac. В вашем серверном приложении нет кода Javascript. Приложение представляет собой просто набор файлов PHP с набором других статических файлов для поддержки сгенерированного HTML.

1 голос
/ 16 января 2012

Я не эксперт, но я полагаю, поскольку PHP является языком сценариев на стороне сервера, нет никакого способа сделать это чисто в php, кроме как перезагрузить страницу каждый раз, когда вы переключаете опцию выпадающего меню.Может быть, вы могли бы сделать это с помощью фреймов (но кто хочет их использовать?).

0 голосов
/ 16 января 2012

jQuery - это просто заранее написанное подмножество javascript, вам не разрешено использовать javascript? если вы не можете использовать его, то ваша способность динамических страниц значительно уменьшается.

AJAX также использует javascript и является решением, которое я использую для загрузки динамического контента. Вам нужны примеры или способ сделать это без JavaScript.

...