Javascript Chrome不返回哈希值
如果jQueryJavaScript在URL末尾返回哈希值,我将使用以下代码段。它在FF中工作良好,但第4行的警报在Chrome中返回空 似乎Javascript Chrome不返回哈希值,javascript,jquery,google-chrome,hash,Javascript,Jquery,Google Chrome,Hash,如果jQueryJavaScript在URL末尾返回哈希值,我将使用以下代码段。它在FF中工作良好,但第4行的警报在Chrome中返回空 似乎window.location.hash.substring(1)行不起作用。我还尝试了window.location.hash.replace(“#“,”) 在Chrome中从URL检索哈希值的技巧是什么 URL的构建方式如下: http://www.ourdomain.com/thispage.html#IL 其中,IL是一个州的两个字母缩写。我想得
window.location.hash.substring(1)
行不起作用。我还尝试了window.location.hash.replace(“#“,”)代码>
在Chrome中从URL检索哈希值的技巧是什么
URL的构建方式如下:
http://www.ourdomain.com/thispage.html#IL
其中,IL是一个州的两个字母缩写。我想得到“IL”
我这里有一个工作演示:
单击Chrome中的“按状态搜索”选项卡,然后单击某个状态,您将看到该问题。浏览器显示它要转到的url已正确构建
谢谢。在Chrome中,只能设置哈希将锚定,例如:
<a href="#exemplo" />
您可以尝试以下方法:
$(window).on('hashchange', function() {
console.log(window.location.hash.substring(1));
});
click事件在hashchange事件之前触发,因此您不能依赖map click实现(即使您延迟了它)
hashchange支持的浏览器列表:
如果您不必使用哈希,这里有一个更简单的解决方案:
$("#tab2.tab_content #map a").click(function() {
console.log($(this).attr('href').substring(1));
});
总之,你不应该使用任何延迟的方法。问题不是很明显,还是我太傻了?在下面的函数中,您处理地图上的单击,收听单击
,将它们延迟500ms
,然后运行您的函数
$("#tab2.tab_content #map").delayed('click', 500, function() {
state = window.location.hash.substring(1);
alert(state);
jsonLink = 'http://ml.uscm.org/ministries.json?state=' + state + '&active=true&callback=?';
getMapResults();
return false;
});
但是在您的警报
状态
时,它是空的,因为您尚未设置它。您的返回false代码>还将阻止浏览器更改哈希
试试这个功能,我打赌你会得到一些东西:
$("#tab2.tab_content #map").delayed('click', 500, function() {
setTimeout(function(){
var state = window.location.hash.substring(1);
alert(state);
jsonLink = 'http://ml.uscm.org/ministries.json?state=' + state + '&active=true&callback=?';
getMapResults();
}, 500);
});
使其工作的快速方法是执行以下操作:
$("#tab2.tab_content #map a").delayed('click', 500, function(e) {
state = $(this).attr('href').replace('#', '');
alert(state);
});
然后,还可以通过将以下内容添加到回调中,轻松地手动更改哈希:
window.location.hash = state;
但是你真正的问题是你的a
(锚定)没有改变散列本身,这使得你的代码中似乎有某个地方在阻止它。你如何修改一下你的代码
$("#tab2.tab_content #map a").click(function(){
console.log($(this).attr("href"));//this outputs the value to the console
});
这将为加利福尼亚州输出#CA
i、 e
在您的代码中,如果在触发事件时放置断点(ln36state=window.location.hash.substring(1);
),则窗口尚未更改位置,因此哈希在该点不存在。当我签入Chrome的inspector时,您的锚点似乎使用了来自不同命名空间的href
,它没有在svg
标记中声明
<a xlink:href="#SD">
从这里开始,我就不知道了:浏览器是否可以将标记的某个名称空间存储在其他地方?我已经搜索了它的DOM属性,找不到它
另一个线索:您也声明了xmlns:svg
引自前一链接:
绑定时,请注意不要键入xmlns:svg,而不仅仅是xmlns
SVG名称空间。这是一个容易犯的错误,但却是可以犯的错误
打破一切。它不是使SVG成为默认名称空间,而是
将其绑定到名称空间前缀“svg”,这几乎是肯定的
而不是您想要在SVG文件中执行的操作。符合标准的浏览器
然后将无法识别任何没有标记的标记和属性
显式名称空间前缀(如果不是全部的话,可能是大部分)并失败
将文档呈现为SVG
我感谢所有的帮助和建议
问题的答案是,我需要将URL的路径设置为绝对路径,而不是相对路径
例如,JavaScript中的一行是:
"AL": {tooltip: 'Alabama', attr: {fill: '#F9B625', href: '#AL'}},
致:
一旦我对所有50个州都做了更改,点击地图就能正确地从jasonp提要中提取数据,并在Chrome和Firefox中显示出来。你有没有一个例子,或者我们可以在哪里查看这个问题?我已经更新了这个问题,以包含更多信息。)。另外--what isdelayed
?delayed是一个jquery插件,它会稍微减慢点击的处理速度,以便FF有时间更新URL,否则它会在URL更改为新哈希之前得到处理。这就是为什么我没有JSFIDLE,没有那么多依赖文件的部分原因。我已经将问题缩小到这个片段,并希望这足以找到答案。我可能是错的,但当您从锚点的单击事件返回false时,它不应该更改哈希…这会创建一个错误:Uncaught ReferenceError:state notdefined@RichCoy,请参阅我的编辑。这只是为了测试这是一个问题,你应该阅读和理解我提出的问题,并开始玩它。试试这个,看看发生了什么,我想理解,对jQuery来说还是很陌生的。我花了几个星期才走到这一步。您更新的代码仍然表示状态未定义,尽管它似乎位于警报上方的行上。我已经更新了演示以使用您的代码。@RichCoy您确定吗?我看到xmlns=”http://www.w3.org/2000/svg“
,但不是xlink
一个。好吧,叫我疯子吧,但在我写这篇文章的时候,我没有在你的示例页面中看到它。另外,即使我是盲人,它也必须是svg
标记的属性,而不是在另一行。下面是我看到的屏幕截图:@RichCoy好的。。。但Chrome并没有保留所有这些属性。见我编辑的帖子
var myURL = document.URL; //example http://www.ourdomain.com/thispage.html#IL
var getTheMagicWord = myURL.split("#");
console.log(getTheMagicWord[1]); //logs IL
<svg height="100%" version="1.1" width="100%" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 165 96" preserveAspectRatio="meet" style="overflow: hidden; position: relative;">
"AL": {tooltip: 'Alabama', attr: {fill: '#F9B625', href: '#AL'}},
"AL": {tooltip: 'Alabama', attr: {fill: '#F9B625', href: 'http://richcoy.com/locator/index2.html#AL'}},
var myURL = document.URL; //example http://www.ourdomain.com/thispage.html#IL
var getTheMagicWord = myURL.split("#");
console.log(getTheMagicWord[1]); //logs IL