【问题标题】:Keep select list on reload在重新加载时保留选择列表
【发布时间】:2015-10-13 16:20:17
【问题描述】:

我有一个选择列表,但是在页面重新加载时,列表中的数据没有保存。 通过从 $_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 的了解不够(还)

【问题讨论】:

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


    【解决方案1】:

    使用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>
    

    【讨论】:

      【解决方案2】:

      您可以使用会话来做到这一点。这是使用它的方式,您可以在会话中存储最后选择的值。即使重新加载paga,会话值也不会被破坏。

      例如,

      <?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
      ?>
      

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

      <?php
      session_start(); //Not required if your form action is on same page, else required  //Rest code 
      
      $_SESSION['subTitleRadio'] = $_GET['subTitleRadio'] // OR $_POST['subTitleRadio']; // Rest code 
      ?>
      

      同样的代码适用于我。

      【讨论】:

      • 谢谢,但是这如何与选择框一起工作?因为我猜这要复杂得多。
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:
        <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>
        

        当您发布表单时,您只需将选定的选项值(以逗号分隔)写入本地存储。

        【讨论】:

          【解决方案5】:

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

          <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 标记。

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

          自己尝试一下,玩弄一下代码。

          【讨论】:

            【解决方案6】:

            我终于找到了一个解决方案: 唯一的缺陷是:) 不过因为我是用插件来显示的,所以没什么大不了的。

            解决方法: 我创建了 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>
            

            【讨论】:

              猜你喜欢
              • 2012-06-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-12-19
              • 2012-05-14
              相关资源
              最近更新 更多