我有一个下拉列表和一个输入字段。
我希望更改下拉列表后立即更改URL。

<?php $s = $_GET["s"]; $q = $_GET["q"]; ?>
<form method="get" action="" name="formulaire" >
   <input type="text" name="q" value="<?php echo $q; ?>" />
   <select name="s" onchange="if (this.value) window.location.href=this.value">
   <option <?php if ( $s == 'opt1' ) { echo 'value="opt1" selected="selected" >opt1 '; } else { echo 'value="opt1" >opt1 '; } ?></option>
   <option <?php if ( $s == 'opt2' ) { echo 'value="opt2" selected="selected" >opt2 '; } else { echo 'value="opt2" >opt2 '; } ?></option>
   <option <?php if ( $s == 'opt3' ) { echo 'value="opt3" selected="selected" >opt3 '; } else { echo 'value="opt3" >opt3 '; } ?></option>
   </select>
</form>


就像现在一样,它仅在输入字段在列表之前填充时才运行。我试图用value="opt1"替换value="?s=opt1"。但是,当填写输入字段时,URL就是这样的?q=test&s=%3Fs%3Dopt1

这是我期望的网址:

如果仅填充文本区域:?q=text

如果仅选择下拉列表:?s=opt1

如果输入字段和下拉列表都被填充/选择:?q=texte&s=opt1

这是一个示例:http://arkhana.fr/tempstack/menudyn.php

最佳答案

尝试这个。使用选择onchange =“ loadUrl()”。假设选项值=“ opt1”像上面一样...不包含“?=”等,我在示例页面上看到了ATM。

在页面上放置以下脚本:

function loadUrl() {
  var params = [];
  var inpVal = document.getElementsByName("q")[0].value;
  if (inpVal.length) params.push("q="+inpVal);
  var selVal = document.getElementsByName("s")[0].value;
  if (selVal.length) params.push("s="+selVal);

  window.location.search = params.join("&");
 }

关于javascript - 带有OnChange事件的几种形式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36479417/

10-09 07:50