0

我已经搜索并搜索了答案,但我没有任何运气。

我有一个包含四个 Select 的表单,并且只需要第一个 Select。这些选择具有由从我的数据库中提取的 JS 脚本填充的选项,以创建一个动态相关的下拉菜单。问题是我不希望“未选择”选择将它们的参数传递给 URL 并使查询字符串变得又长又复杂。另外,当“未选择”选择传递默认值时,它类似于“选择组”,在 URL 中显示为“选择+组”。我肯定想使用 GET 以便我可以复制/保存链接。如何有条件地添加 Select 值而不阻止 JS 脚本填充选项?

例如,这里是一个典型的 URL:

mydomain.com/bn/products?Division=1&Group=Select+Group&Segment=Select+Segment&Category=Select+Category

这是我希望该 URL 与我的 .htaccess 和 RewriteRule 一起使用的内容:

mydomain.com/bn/products/1

因为没有选择 Group、Segment 和 Category,所以它们的值对会造成不必要的 URL 混乱。

任何建议,将不胜感激。

更多信息

我是在这里发帖的新手,我不明白在哪里添加冗长的跟进。开始:

我喜欢通过 JS 拦截和生成基于所做选择的新 URL 的想法。我遇到的一个问题是表单创建 URL 的方式:

mydomain.com/bn/products?Division=1

一点背景可能会有所帮助。我正在使用内容变量从数据库中检索页面内容。除站点主页外的所有内容都显示在内容目录 (/bn) 中。上面链接中发生的情况是内容变量已经设置(产品),但是表单正在放置?在内容变量之后。这是一个简单的 RewriteRule,如果 URL 编写正确,它将起作用:

RewriteRule ^bn/products/([0-9-]+)$ /bn/index.php?content=products&Division=$1

我可以使用以下 URL 访问我的选择: mydomain.com/bn/products/1因为它符合重写规则。同样,我可以使用传统的: mydomain.com/bn/index.php?content=products&Division=$1.

现在我必须承认我是一个 PHP 人,JS 和 jQuery 经验非常有限。Shomz onsubmit="my_submit_function(); return false;"在 my_submit_function 中建议我可以检查选择的值 var divValue = $('#Division').val()并将其附加到 URL。我不知道如何发送生成的 URL。显然,我希望 URL 采用“友好”形式 mydomain.com/bn/products/1。有人可以在那里提供见解吗?

非常感谢。

更新

我创建了一个函数,将表单创建的 URL 替换为我的 JS 条件生成的 URL。首先,这是表格顶部:

<form action="" onsubmit="my_submit_function()" method="get" name="DDm" id="DDm">

然后是我的选择之一:

<select id="Division" name="Division" onchange="Division_reload(this)">
  <option selected><?php echo $division; ?></option>
</select>

动态下拉菜单脚本添加了 onchange 元素,这会导致我的问题吗?

我的功能:

function my_submit_function() {
  var DDmURL = $reqURL;
  var divVal = document.getElementById('Division').value;
  var grpVal = document.getElementById('Group').value;
  var segVal = document.getElementById('Segment').value;
  var catVal = document.getElementById('Category').value;

  if ((divVal != $division) || (divVal != -1)) {
      DDmURL += '/'+divVal; }
  if ((grpVal != $group) || (grpVal != -1)) {
      DDmURL += '/'+grpVal; }
  if ((segVal != $segment) || (segVal != -1)) {
      DDmURL += '/'+segVal; }
  if ((catVal != $category) || (catVal != -1)) {
      DDmURL += '/'+catVal; }
window.location = DDmURL;
};

我应该提一下 PHP 变量($division 等)是默认值,例如“Select Division”。我还应该提到,我省略了显示 php 打开和关闭标签以简化上面的 JS 代码。标签在那里,只是没有显示。

当我使用下拉菜单从 Division 中进行选择时,我仍然得到与以前相同的 URL:

mydomain.com/bn/products?Division=1

任何想法为什么这不能按预期工作?

解决

正如我对 Shomz 的评论中所述,我没有将我的 PHP 变量括在引号中,这会导致问题并导致控制台中出现错误消息。一旦我改变了它,一切都按预期工作。

感谢大家的帮助。

4

2 回答 2

0

要从出现中删除那些“Select+Group”,只需将这些选项分配为零或任何适合您的值。(但在执行以下段落后,您甚至不需要它)

为了完全阻止这些发送,您可以创建一个onsubmit函数,该函数将覆盖表单提交功能,并首先仅基于所选选项生成一个新 URL,然后才会重定向。您还可以从 DOM 中完全删除未选择的元素,然后再提交表单。无论您选择哪种方式,HTML 部分都应如下所示:<form method="GET" action="your_url" onsubmit="my_submit_function(); return false;">

更新

根据您提供的其他信息,我可以说您可以根据需要构建友好的 URL,您不受任何限制。您可以像在 PHP 中一样使用ifor语句。switch例如:

var url = siteRoot;

if (divValue == "someUglyProductsValue")
   url += '/products';
else if (divValue == "someUglyOtherValue")
   url += '/other';

if (groupValue == "someUglyWhateverValue")
   url += '/whatever';

等等......这将能够给你类似mydomain.com/bn/products/whatevermydomain.com/bn/othermydomain.com/bn/other/whatever......

按照您想要的方式构建整个 URL 后,您可以执行一些简单的操作,例如window.location = url;重定向您的浏览器。

于 2013-06-17T22:50:52.743 回答
0

如果您共享一些代码会更容易。

我的想法是在更改表单的同时动态生成目标 url。因此,如果取消选择您不需要的选择之一,它们的 url 部分也会被删除。

然后,在目标 PHP 页面上,您将使用 isset($_GET['something']) 检查这些元素是否被检查。

于 2013-06-17T22:58:04.893 回答