3

在下面的表单中,我更改了 action 属性并提交了表单。这很好用。发生的事情是:如果当前位置是http://localhost/search/?mod=all并且搜索词是 14,则操作将更改为,http://localhost/search/?mod=all&handle=14浏览器中的 url 也会更改。

但是下次我尝试搜索时,由于现在的 url 是http://localhost/search/?mod=all&handle=14,我得到http://localhost/search/?mod=all&handle=14&handle=15. 它会随着每个搜索词继续下去。

知道如何http://localhost/search/?mod=all通过这一切保留原始网址。

这是表格:

<form method="GET" class="modForm" action="">
<input type="text" placeholder="Search" class="modSearchValue">
<input type="radio" name="text" value="text" class="text" title="Search">
</form>

这是jQuery:

$('.modForm').submit(function(event) {
  var $this = $(this);
  var query = $this.find('.modSearchValue').val(); // Use val() instead of attr('value').
  var locale = window.location;
  if ($('.text').is(':checked')) {
    query = '&text=' + query;
  } else {
    query = '&handle=' + query;
  }
  route = locale + query;
  console.log(route);
  if (query.length >= 1) {
    // Use URI encoding
    var newAction = (route);
    console.log(newAction); // DEBUG
    // Change action attribute
    $this.attr('action', newAction);
    //event.preventDefault();
  } else {
    console.log('Invalid search terms'); // DEBUG
    // Do not submit the form
    event.preventDefault();
  }
});
4

4 回答 4

2

有几种方法可以做到这一点。我宁愿不要弄乱 window.location 并做一些更简单的事情:

<form method="GET" class="modForm" action="">
    <input type="hidden" name="mod" value="all"> <!-- mod is a hidden variable -->
    <input type="text" id="modSearchValue">      <!-- name not defined yet -->
    <input type="checkbox" id="textOrHandle">    <!-- name not required -->
</form>
$(".modForm").submit(function() {
    $("#modSearchValue").attr("name", $("#textOrHandle").is(":checked") ? "text" : "handle");
    // let the form submit!
});
于 2013-01-01T09:30:41.187 回答
0

你有多种方法可以做到这一点。为什么不能将原始 URL 存储在全局变量中(保留在表单提交等函数之外)

如果您不希望这样,您可以使用 window.location.hash 它将返回您发送的所有 GET 参数。使用 split 您将能够获得所需的确切参数。如果您仍然需要帮助,我将发布代码。

于 2013-01-01T09:21:44.703 回答
0

最快的解决方案:如果,对于这段代码,window.location应该总是http://localhost/search/?mod=all,那么你甚至不需要说var locale = window.location. 只是说var locale = "http://localhost/search/?mod=all",你避免了这个问题。

于 2013-01-01T09:25:11.140 回答
0
​var s = window.location.hostname; // gets the hostname
var d = window.location.protocol; // gets the protocol
var g = window.location.search; // gets all the params
var x = g.split("&"); // split each parameter
var url = d+"//"+s+x[0]; // makes url you want
alert(url);​​​​ // just for chill
于 2013-01-01T09:29:41.460 回答