Выполнить функцию при изменении раскрывающегося меню в PHP - PullRequest
1 голос
/ 05 августа 2020

Вот небольшой фрагмент кода, который работает несколько хорошо, но не совсем то, чего я пытаюсь достичь:

<html>
<head>
</head>
<body>
<form method='post'>
    Display
    <select name="displayOptions" onchange="this.form.submit()">
        <option selected value="all">all</option>
        <option value="open">open</option>
        <option value="reserved">reserved</option>
        <option value="blocked">blocked</option>
    </select> computers
</form>

<?php
    if(isset($_POST["displayOptions"])){
        if ($_POST["displayOptions"]=='all')
           allFunction();
        if ($_POST["displayOptions"]=='open')
           openFunction();
        etc...
   }
?>
</body>
</html>

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

  1. 'all' выбрано по умолчанию (Работает как задумано), однако allFunction () не запускается. Даже если вы выберете другой вариант, а затем снова выберете «все», «все» все равно не сработает. Я бы хотел, чтобы allFunction запускался, как только эта форма загружается с выбранным 'all' и, конечно, чтобы иметь возможность снова выбрать 'all' позже.
  2. Когда выбирается другой выбор, он загружается правильная функция (WAI), однако раскрывающийся список возвращается ко всем. Я знаю, почему он это делает (потому что страница перезагружается, а по умолчанию выбрано значение «all»), но я бы хотел, чтобы он оставался на выбранной опции!

Когда я набирал out У меня такое чувство, что я могу решить №2 с помощью переменной $ _SESSION, но я все еще не понимаю, почему первый вариант в раскрывающемся списке выбора не регистрируется.

1 Ответ

1 голос
/ 05 августа 2020

Как указал Funk, вы можете вместо этого изучить вызовы ajax, чтобы избежать перезагрузки страницы при выборе чего-либо (что, возможно, является плохим пользовательским интерфейсом), но если вы настаиваете на использовании той же структуры, вы можете сделайте это:

<?php
    // Set the option selected ("all" by default)
    $option_selected = !empty($_POST["displayOptions"])? $_POST["displayOptions"] : "all";
?>

...

<select name="displayOptions" onchange="this.form.submit()">
    <option value="all" <?php if ($option_selected == "all") echo "selected" ?>>all</option>
    <option value="open" <?php if ($option_selected == "open") echo "selected" ?>>open</option>
    <option value="reserved" <?php if ($option_selected == "reserved") echo "selected" ?>>reserved</option>
    <option value="blocked" <?php if ($option_selected == "blocked") echo "selected" ?>>blocked</option>
</select>

...

<?php
    if ($option_selected == "all")
       allFunction();
    else if ($option_selected == "open")
       openFunction();
    etc...
?>

Я не тестировал его, но он должен работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...