【问题标题】:select option clears when page loads in php在 php 中加载页面时,选择选项会清除
【发布时间】:2011-01-18 17:11:38
【问题描述】:

场景是这样的:见下面的选择

<form name="limit">
    <select name="limiter" onChange="limit(this.value)">
        <option selected="selected">&nbsp;</option>
        <option value="5">5</option>
        <option value="10">10</option>
        <option value="15">15</option>
    </select>
</form>

我希望在选择任何选项时发生 3 件事:

1.) js limit() 函数被调用,它所做的一切都是获取当前 url,添加新的查询参数 'limit' 和用户选择的值,例如:

http://localhost/blahblah/apps/category.php?pg=1&catId=3021&limit=5

(这将导致 category.php 页面被点击,并且显示的产品数量仅限于用户选择的值)

2.) 一旦 url 被点击,它会重新加载,但我 DONT 希望选择的值重置回默认值(它当前执行的操作)。我希望它反映页面重新加载后的用户选择。

3.)另外,当我移动到下一页(分页)时,我希望将状态带到下一页(即记住用户选择)。

【问题讨论】:

  • 嗨!当您在这个问题上悬赏时,我想已经提供的答案并没有帮助您解决问题。您能否编辑您的问题以添加一些关于现有答案不合适的信息? (通过更好地理解您的问题,它可能会帮助您获得更好的解决方案 :-))

标签: php javascript html ajax select


【解决方案1】:

你能检查它是否有效吗?

<script type="text/javascript">
function limit(myvalue)
{
location.href="http://yoursite?limit="+myvalue;
}

function querySt() {
hu = window.location.search.substring(1);
gy = hu.split("&");
for (i=0;i<gy.length;i++) {
ft = gy[i].split("=");
if (ft[0] == 'limit') {
for (var idx=0;idx<document.getElementById('limiter').options.length;idx++) {
            if (document.getElementById('limiter').value==ft[1]) {
                  document.getElementById('limiter').selectedIndex=idx;


                  }

                  }
}
}

}

   </script>

 </head>
 <body onload="querySt()">
 <form name="limits"> 
    <select onchange="limit(this.value)" id="limiter"> 
        <option selected="selected">&nbsp;</option> 
        <option value="5">5</option> 
        <option value="10">10</option> 
        <option value="15">15</option> 
    </select> 
</form> 

 </body>

【讨论】:

    【解决方案2】:

    Tatu Ulmanen 的回答处理了显示选择的部分。要进行分页部分,只需将限制作为查询字符串中的参数传递。

    例如,如果您当前正在使用如下所示的页面链接:

    <a href="http://localhost/blahblah/apps/category.php?pg=1&catId=3021">1</a>
    

    更改它们以包含您的限制参数,以便它被传递:

    <a href="http://localhost/blahblah/apps/category.php?pg=1&catId-3021&limit=5">1</a>
    

    只需确保更改您的分页代码以说明每个页面只有“限制”项目长这一事实。为了帮助您做到这一点,我需要知道您是如何进行分页的。

    【讨论】:

      【解决方案3】:
      <script type="text/javascript">
          function limit(value)
          {
              url = "localhost/yourapp?limiter="+value;
          }
      </script>
      
      <form name="limit">
          <select name="limiter" onChange="limit(this.value)">
              <option>&nbsp;</option>
              <option value="5" <?php if($_REQUEST['limiter'] == 5) {echo "selected";}?>>5</option>
              <option value="10" <?php if($_REQUEST['limiter'] == 10) {echo "selected";}?>>10</option>
              <option value="15" <?php if($_REQUEST['limiter'] == 15) {echo "selected";}?>>15</option>
          </select>
      </form>
      

      我在这里使用$_REQUEST,因为我不知道您的表单方法。相应地使用。

      【讨论】:

      • 你好,gaurav,虽然选择元素被包裹在一个表单中,但它实际上并没有提交按钮。 onchange 它调用一个javascript,然后构建指向一个php文件的url,然后传递在url上设置的参数并采取相应的行动......所以当我说$_REQUEST['limiter']它抱怨未定义索引'limiter'
      • 发生此错误是因为您的表单标签中没有方法属性。如果您不想使用提交方法,那么您将必须传递在选择框中选择的值,然后相应地检查它。我已经编辑了我的答案来解释,(可能有一些小错误,你可以很容易地纠正)
      【解决方案4】:

      只需使用 PHP 分配选定的值:

      <form name="limit">
          <select name="limiter" onChange="limit()">
              <option <?php if(!isset($_POST['limiter'])) echo ' selected="selected"'; ?>>&nbsp;</option>
              <option <?php if(isset($_POST['limiter']) && $_POST['limiter'] == 5) echo ' selected="selected"'; ?> value="5">5</option>
              <option <?php if(isset($_POST['limiter']) && $_POST['limiter'] == 10) echo ' selected="selected"'; ?> value="10">10</option>
              <option <?php if(isset($_POST['limiter']) && $_POST['limiter'] == 15) echo ' selected="selected"'; ?> value="15">15</option>
          </select>
      </form>
      

      由于代码难以阅读,您可以使用 PHP 进行循环:

      <form name="limit">
          <select name="limiter" onChange="limit()">
              <option <?php if(!isset($_POST['limiter'])) echo ' selected="selected"'; ?>>&nbsp;</option>
              <?php foreach(array(5, 10, 15) as $p): ?>
              <option <?php if(isset($_POST['limiter']) && $_POST['limiter'] == $p) echo ' selected="selected"'; ?> value="<?php echo $p; ?>">
                  <?php echo $p; ?>
              </option>
              <?php endforeach; ?>
          </select>
      </form>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-23
        • 1970-01-01
        • 1970-01-01
        • 2020-07-25
        • 2021-10-19
        相关资源
        最近更新 更多