重新加载时保持选择列表

时间:2015-07-23 11:28:15

标签: php html forms drop-down-menu reload

我有一个选择列表,但在页面重新加载时,列表中的数据不会保存为corse。 我通过读取$ _GET中的变量修复了TextBoxes和Radio按钮。 以下是我现在的表格示例:

<form action="" id="exampleForm" method="get">
   <input type="checkbox" name="exampleCheckbox" <?php if (isset($_GET['exampleCheckboxStatus'])) {echo "checked";} ?>>Check this
   </br>
   <select name="exampleList" multiple>
       <option>Apple</option>
       <option>Banana</option>
       <option>Cherry</option>
   </select>
   <input type="submit" value="Submit" id="submitButton"> </form>

我想在提交后保留'exampleList'的值 (我留在同一页面上)

我在这里看过几乎看起来像我要求的帖子,但大多数人都想使用javascript。我的问题是否有解决方案,看起来与我现在拥有的相似?我想用php解决这个问题,因为我不认为我对Javascript(还)有足够的了解

6 个答案:

答案 0 :(得分:2)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
      $(document).ready(function(){
          var opts = localStorage.getItem('opts'); // get selected items from localStorage key
          opts =  opts.split(','); // split result from localstorage to array
          $('#exampleList').val(opts); // select options with array

      });
</script>
<html>
    <body>
      <select id="exampleList" multiple>
           <option value="apple">Apple</option>
           <option value="banana">Banana</option>
           <option value="cherry">Cherry</option>
       </select>
    </body>
</html>

当您发布表单时,您只需要将选定的选项值(逗号分隔)写入localstorage。

答案 1 :(得分:1)

我终于找到了解决方案: 唯一的缺陷是:)的顺序 但是因为我使用插件来显示它并不重要。

修复: 我创建了2个数组列表 每个人都有 list1 带有所有选定值的 list2

然后我从 list1 中减去 list2 并且没有重复项 所以我可以用不同的打印方法打印。

<?php error_reporting(E_WARNING);
$fruitArray = array("Apple", "Banana", "Cherry", "Durian", "Eggfruit", "Fig", "Grapefruit");
$selectedFruitArray = $_GET['exampleList'];
$fruitArray = array_diff($fruitArray, $selectedFruitArray);
?>
<form action="" method="get">
    <select name="exampleList[]" multiple>
        <?php
        foreach($fruitArray as $value) {
            echo "<option value='$value'>$value</option>";
        }
        foreach($selectedFruitArray as $value) {
            echo "<option value='$value' selected>$value</option>";
        }
        ?>
    </select>
    <input type="submit">
</form>

答案 2 :(得分:0)

使用FormRepo,一个专门用于保留表单数据的插件 在页面上刷新。

它的用法也很简单:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script src="FormRepo.js"></script>
<script>
    var $form = $('#input')
        , $output = $('#output')
        , repo = new FormRepo('restclient')
        ;
    // get the last submitted values back
    repo.restore($form/*, $form.attr('id')*/ ); // don't necessarily need an identifier
    $form.submit(function (e) {
        // preserve the last submitted values
        repo.preserve($form/*, $form.attr('id')*/ ); // don't necessarily need an identifier
    });

    console.log( repo.all() );
</script>

答案 3 :(得分:0)

您可以使用会话来完成。这是使用它的方式,您可以在会话中存储最后选择的值。即使您重新加载paga,也不会销毁会话值。

例如,

SELECT 
    @Principal= IIF(optionfieldvalue='', NULL, CAST(optionfieldvalue as decimal(38, 18)))
FROM 
    @DATA 
WHERE 
    TemplateFieldId = 47

提交后会话中设置值的PHP代码:

<?php
session_start(); // Other Code
       <div>
            <p>Subtitle needs to be
                <input type="radio" name="subTitleRadio" <?php if ($_SESSION['subTitleRadio'] != "LIKE") echo "checked"; ?> value="LIKE">contain
                <input type="radio" name="subTitleRadio" <?php if ($_SESSION['subTitleRadio'] == "=") echo "checked"; ?> value="=">be equal to
            </p>

            <input type="search" name="subTitleSearchBox" placeholder="filter for subtitle" class="chosenStyle" value="<?php echo $_GET['subTitleSearchBox'];?>">
        </div> //Other Code
?>

相同的代码对我有用。

答案 4 :(得分:0)

首先在选项的值参数处,然后您可以检查exampleList是否具有正确的值并使用它。例如:

<option value="apple" <?php if (isset($_GET['exampleList']) && $_GET['exampleList'] == "apple") echo "selected=\"selected\""; ?>>Apple</option>

答案 5 :(得分:0)

嗯,你可以尝试这些方法。这有点长,你可以把它缩短一点。通过这种方式展示,我希望它更容易理解。

<form action="" id="exampleForm" method="get">
    <?php 
    if (isset($_GET['exampleCheckboxStatus'])) {
        echo '<input type="checkbox" name="exampleCheckbox" checked> Check this';
    } else {
        echo '<input type="checkbox" name="exampleCheckbox"> Check this';
    ?>
    <br />
    <select name="exampleList[]" multiple>
        <?php 
        if( in_array('apple', $_GET['exampleList']) ) { 
            echo '<option value="apple" selected>Apple</option>';
        } else {
            echo '<option value="apple">Apple</option>';
        }
        if( in_array('banana', $_GET['exampleList']) ) { 
            echo '<option value="banana" selected>Banana</option>';
        } else {
            echo '<option value="banana">Banana</option>';
        }
        if( in_array('cherry', $_GET['exampleList']) ) { 
            echo '<option value="cherry" selected>Cherry</option>';
        } else {
            echo '<option value="cherry">Cherry</option>';
        }
        ?>
    </select>
    <input type="submit" value="Submit" id="submitButton"> 
</form>

请注意,我将[]添加到选择的名称并更正了br标签。

添加[]会将类型从“字符串”(文本)更改为数组(多个文本)。然后我们可以检查包含哪些文本。

亲自尝试,稍微使用代码。