我已经搜索并搜索了答案,但我没有任何运气。
我有一个包含四个 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 变量括在引号中,这会导致问题并导致控制台中出现错误消息。一旦我改变了它,一切都按预期工作。
感谢大家的帮助。