代码之家  ›  专栏  ›  技术社区  ›  eozzy

表单提交后保留所选值

  •  26
  • eozzy  · 技术社区  · 16 年前
    <form method="get" action="">
       <select name="name">
          <option value="a">a</option>
          <option value="b">b</option>
       </select>
       <select name="location">
          <option value="x">x</option>
          <option value="y">y</option>
       </select>
       <input type="submit" value="Submit" class="submit" />
    </form>
    

    提交表单时,如何确保所选值在下拉列表中保持选中状态?此表单位于WordPress(PHP)中。

    10 回复  |  直到 7 年前
        1
  •  39
  •   Sarfraz    15 年前

    为了避免许多if-else结构,让javascript自动完成这些技巧:

     <select name="name" id="name">
      <option value="a">a</option>
      <option value="b">b</option>
     </select>
    
    <script type="text/javascript">
      document.getElementById('name').value = "<?php echo $_GET['name'];?>";
    </script>
    
     <select name="location" id="location">
      <option value="x">x</option>
      <option value="y">y</option>
     </select>
    
    <script type="text/javascript">
      document.getElementById('location').value = "<?php echo $_GET['location'];?>";
    </script>
    
        2
  •  22
  •   Ignacio Vazquez-Abrams    16 年前
    <select name="name">
       <option <?php if ($_GET['name'] == 'a') { ?>selected="true" <?php }; ?>value="a">a</option>
       <option <?php if ($_GET['name'] == 'b') { ?>selected="true" <?php }; ?>value="b">b</option>
    </select>
    
        3
  •  5
  •   user3328041    11 年前

    在尝试了所有这些之后,“解决”什么都不起作用。以前对W3学校做过一些研究,并记得有关于保持无线电价值的解释。但它也适用于选择选项。这里有一个例子。试一试就可以了。

    <?php
    $example = $_POST["example"];
    ?>
    <form method="post">        
    <select name="example">
        <option <?php if (isset($example) && $example=="a") echo "selected";?>>a</option>
        <option <?php if (isset($example) && $example=="b") echo "selected";?>>b</option>
        <option <?php if (isset($example) && $example=="c") echo "selected";?>>c</option>
    </select>
    <input type="submit" name="submit" value="submit" />
    </form>
    
        4
  •  3
  •   oda    12 年前

    因为wordpress已经使用jquery,所以可以尝试如下操作:

    var POST=<?php echo json_encode($_POST); ?>;
    for(k in POST){
      $("#"+k).val(POST[k]);
    }
    
        5
  •  3
  •   Cave Johnson    8 年前

    如果您使用的是WordPress(与OP的情况一样),则可以使用 selected 功能。

    <form method="get" action="">
      <select name="name">
       <option value="a" <?php selected( isset($_POST['name']) ? $_POST['name'] : '', 'a' ); ?>>a</option>
       <option value="b" <?php selected( isset($_POST['name']) ? $_POST['name'] : '', 'b' ); ?>>b</option>
     </select>
     <select name="location">
       <option value="x" <?php selected( isset($_POST['location']) ? $_POST['location'] : '', 'x' ); ?>>x</option>
       <option value="y" <?php selected( isset($_POST['location']) ? $_POST['location'] : '', 'y' ); ?>>y</option>
     </select>
     <input type="submit" value="Submit" class="submit" />
    </form>
    
        6
  •  2
  •   Lukas Ignatavičius    12 年前

    仅JS解决方案:

    var tmpParams = decodeURIComponent(window.location.search.substr(1)).split("&");
    for (var i = 0; i < tmpParams.length; i++) {
        var tmparr = tmpParams[i].split("=");
        var tmp = document.getElementsByName(tmparr[0])[0];
        if (!!tmp){
            document.getElementsByName(tmparr[0])[0].value = tmparr[1];
        }
    }
    

    或者,如果使用jquery,则可以替换

     var tmp = document.getElementsByName(tmparr[0])[0];
     if (!!tmp){
         document.getElementsByName(tmparr[0])[0].value = tmparr[1];
     }
    

    使用:

     $('*[name="'+tmparr[0]+'"]').val(tmparr[1]);
    
        7
  •  0
  •   Hayley Guillou    10 年前

    这对我有用!

    <label for="reason">Reason:</label>
    <select name="reason" size="1" id="name" >
        <option value="NG" selected="SELECTED"><?php if (!(strcmp("NG", $_POST["reason"]))) {echo "selected=\"selected\"";} ?>Selection a reason below</option>
        <option value="General"<?php if (!(strcmp("General", $_POST["reason"]))) {echo "selected=\"selected\"";} ?>>General Question</option>
        <option value="Account"<?php if (!(strcmp("Account", $_POST["reason"]))) {echo "selected=\"selected\"";} ?>>Account Question</option>
        <option value="Other"<?php if (!(strcmp("Other", $_POST["reason"]))) {echo "selected=\"selected\"";} ?>>Other</option>
    
    </select>
    
        8
  •  0
  •   Heena Patel    8 年前

    尝试此解决方案以在下拉列表中保留所选值:

    <form action="<?php echo get_page_link(); ?>" method="post">
        <select name="<?php echo $field_key['key']; ?>" onchange="javascript: 
           submit()">
        <option value="">All Category</option>
        <?php 
        foreach( $field['choices'] as $key => $value ){ 
           if($post_key==$key){ ?>
              <option value="<?php echo $key; ?>" selected><?php echo $value; ?></option>
    <?php
       }else{?>
      <option value="<?php echo $key; ?>"><?php echo $value; ?></option>
     <?php }
      }?>
     </select>
    </form>
    
        9
  •  0
  •   user5837729    7 年前

    我不经常在wp中工作,但是对于wordpress之外的表单,这很好地工作。

    PHP

    location = "";                                   // declare variable
    
    if($_POST) {
        if(!$_POST["location"]) {
            $error .= "Location is required.<br />"; // If not selected, add string to error message
         }else{
            $location = $_POST["location"];          // If selected, assign to variable
         }
    

    HTML

    <select name="location">
        <option value="0">Choose...</option>
        <option value="1" <?php if (isset($location) && $location == "1") echo "selected" ?>>location 1</option>
        <option value="2" <?php if (isset($location) && $location == "2") echo "selected" ?>>location 2</option>
    </select>
    
        10
  •  -1
  •   Adrian Preda    11 年前
    <form method="get" action="">
     <select name="name" value="<?php echo $_GET['name'];?>">
       <option value="a">a</option>
       <option value="b">b</option>
     </select>
     <select name="location" value="<?php echo $_GET['location'];?>">
       <option value="x">x</option>
       <option value="y">y</option>
     </select>
       <input type="submit" value="Submit" class="submit" />
    </form>