我有两个链接,两个链接都指向联系页面,但根据点击的链接,联系表单中将显示不同的字段。是否有可能检测到点击了哪个链接的网址如下:mysite.com/contact.html
而不是mysite.com/contact.html?link=1
?或许以某种方式使用JavaScript?
答案 0 :(得分:2)
基本上你有三个选择(或两个,取决于你想要的方式):
最好的事情,就是你所说的你不想做的事情:使URL略有不同(可能带有查询字符串),然后查看location
/ location.search
在联系页面中查看他们点击的内容。
它不必像位查询字符串参数那样明显;它可能更精细,例如example.com/contact.html
与example.com/contactb.html
。如果您希望为这两个URL提供相同的实际页面,则可以将服务器配置为使其成为另一个的别名。
请注意,这不仅仅是实用的(它可靠地工作),但因为这两个页面的URL不同。由于页面不同,因此使其唯一标识符(其URL)不同是有意义的。
这是#1的变体:使用散列片段代替查询字符串或不同的页面名称,例如example.com/contact.html#A
和example.com/contact.html#B
。联系人页面可以通过location.hash. (Make sure you don't have any elements with the
id “A”
or
“B”`来检查,因此页面不会向下滚动到它们。)
或者,在点击联系页面可以查找的链接时设置信息。这可能是一个短期过期的Cookie,或session storage。
以下是会话存储的外观。在第一页上,设置会话变量:
// (The value must be a string.)
sessionStorage.contactType = "some value to tell you what contact type";
在联系页面上,检索会话变量:
var contacttype = sessionStorage.contactType;
请注意,这完全是客户端的。有关详细信息,请参阅上面的链接。
答案 1 :(得分:1)
在class="detector"
和id="A"
以及id="B"
之类的链接中添加一个类,而不是使用jquery事件来传递信息。
$('.detector').click(function(){
e.preventDefault(); // prevent default anchor behavior
location.href=$(this).attr('href') + '?link=' + $(this).attr('id');
});
这将适用于您想要的任意数量的链接。
答案 2 :(得分:0)
我意识到你正在考虑用javascript做这个,但是服务器端替代方案(将来会让你更灵活):
构建一个处理联系表单的php脚本,根据具体的URL显示不同的表单字段。我们假设它位于example.com/contact/index.php
。
在.htaccess
文件夹中创建一个/contact
文件,其内容如下:
RewriteEngine On
RewriteBase /contact/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /([^/]+)/?$ [NC]
RewriteRule .* /contact/index.php?form=%1 [L]
这样做,是在/contact/
之后捕获虚拟文件夹,并将其重写为index.php
的网址参数(例如index.php?form=sales
)
您现在可以在html中明显使用这些链接:
在您的联系表单index.php
中,您可以处理不同的$_GET
参数:
if (isset($_GET['sales']))
{
//do this
}
else if (isset($_GET['support']))
{
//do that
}
一些直接的好处:
include
。if
语句来处理另一个联系表单变量。