我搜索并搜索了答案,但我没有任何运气。
我有一个包含四个选择的表单,只需要第一个选择。这些选择具有由JS脚本填充的选项,该脚本从我的数据库中拉出以创建动态相关的下拉菜单。问题是我不希望“未选中”选择将其参数传递给URL并使查询字符串变得冗长和复杂。另外,当“未选择的”选择通过默认值时,它就像“选择组”,在URL中显示为“选择+组”。我肯定想使用GET,所以我可以复制/保存链接。如何有条件地添加Select值,而不是阻止JS脚本填充选项?
例如,现在是一个典型的URL:
mydomain.com/bn/products?Division=1&Group=Select+Group&Segment=Select+Segment&Category=Select+Category
以下是我希望该网址与我的.htaccess&重写规则:
mydomain.com/bn/products/1
由于未选择“组”,“细分”和“类别”,因此它们的值对会使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
我可以使用以下网址访问我的选择:mydomain.com/bn/products/1
因为它符合重写规则。同样,我可以使用传统的mydomain.com/bn/index.php?content=products&Division=$1
来实现目标。
现在我必须承认我是一个非常有限的JS和jQuery经验的PHP人。 Shomz在my_submit_function中建议onsubmit="my_submit_function(); return false;"
我可以检查select 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 open和close标签以简化上面的JS代码。标签在那里,只是没有显示。
当我使用下拉列表从Division I中选择时,仍然会获得与之前相同的URL:
mydomain.com/bn/products?Division=1
为什么这不符合预期的任何想法?
分辨
正如我对Shomz的评论所述,我没有将我的PHP变量括在引号中,这导致了问题并导致控制台中出现错误消息。一旦我改变了,一切都按预期工作。
感谢大家的帮助。
答案 0 :(得分:0)
要从显示中删除这些“选择+组”,只需为这些选项指定零值或任何适合您的选项。 (但是在执行以下段落之后,您甚至不需要这样做)
要完全阻止发送,您可以创建一个覆盖表单提交功能的onsubmit
功能,并且首先仅根据选定的选项生成新的URL,然后才会重定向。您也可以完全从DOM中删除未选中的元素,然后提交表单。无论您选择哪个,HTML部分应如下所示:<form method="GET" action="your_url" onsubmit="my_submit_function(); return false;">
更新
根据您提供的其他信息,我可以说您可以根据需要构建友好的网址,不受任何限制。您可以像在PHP中一样使用if
或switch
语句。例如:
var url = siteRoot;
if (divValue == "someUglyProductsValue")
url += '/products';
else if (divValue == "someUglyOtherValue")
url += '/other';
if (groupValue == "someUglyWhateverValue")
url += '/whatever';
等......这样就可以为您提供mydomain.com/bn/products/whatever
或mydomain.com/bn/other
或mydomain.com/bn/other/whatever
......
按照您希望的方式构建整个网址后,您可以执行简单的操作window.location = url;
来重定向浏览器。
答案 1 :(得分:0)
如果您分享了一些代码,会更容易。
我的想法是在更改表单时动态生成目标网址。 因此,如果取消选择其中一个不需要的选择,则也会删除其部分网址。
然后,在目标PHP页面上,您需要检查isset($ _ GET [&#39; something&#39;])以查看是否检查了这些元素。