我的锚标签href
只包含一个片段。我分配了一个点击处理程序。当我点击链接时,处理程序完成后,页面会加载更高级别的页面。
以下是事实:
http://domain.com/app/path_component
<base href="http://domain.com/app/">
<a href="#fragment">
... </a>
$('a').on('click', handler)
.htaccess
将服务器处理指向服务器上的PHP应用程序... /app
我没有返回false,也没有调用e.stopPropagation()或e.preventDefault(),所以我理解浏览器会执行默认操作并处理href。我不明白为什么它加载另一页?
在追踪我的处理程序时,我看到this.href是“http://domain.com/app/#fragment”。这可以解释为什么父页面正在加载,但我不明白为什么它是那个页面而不是http://domain.com/app/path_component#fragment“?
我能看到原始href的唯一方法是直接检查href属性。我希望允许页面加载,如果它是必要的,但当它只是一个片段时阻止它,所以我写了处理程序返回为:
return $(this).attr('href')[0] != '#';
为什么这有必要?我认为片段的默认处理不是回到服务器。
答案 0 :(得分:2)
浏览器通过将短链接与基本标记中指定的链接连接来处理短链接,因此如果您分配了<select name="city" id="cities" class="selectbox">
<?php
foreach ($citylist as $city) {
echo "<option value='$city'>$city</option>";
}
?>
</select>
所有短链接,则相对来源(即<base href="http://something.com/">
)将相对于{{1}进行处理}}。 <img src="...">
主要用于使您的网页易于移植到其他网站。
因此,作为解决方案,您需要相对于base分配锚路径:
base
另一种方式是基于js的锚:
<base>
其中一个解决方案是在页面开头使用javascript生成基本节点,并将其作为子项附加到<a href="path_component#fragment">
:
<a href="javascript:;" onclick="document.location.hash='fragment';">fragment</a>
它应该可以工作,但正如我上面提到的,如果您使用图像源的相对路径,则应该使用<head>
(即<script>
var currPage = window.location.href;
if (document.getElementsByTagName("base").length === 0) {
var base = document.createElement("base");
base.setAttribute("href", currPage);
document.getElementsByTagName('head')[0].appendChild(base);
}
else {
document.getElementsByTagName("base")[0].setAttribute("href", currPage);
}
</script>
)开始链接,以获取基于父页面的绝对路径。