Ale*_*exV 5 html javascript dom google-maps dhtml
我动态地向DOM添加<a>(链接)标记:
var link = document.createElement('a');
link.href = 'http://www.google.com/';
link.onclick = function () { window.open(this.href); return false; };
link.appendChild(document.createTextNode('Google'));
//someDomNode.appendChild(link);
Run Code Online (Sandbox Code Playgroud)
我希望链接在新窗口中打开(我知道它很糟糕,但它是必需的).我也尝试使用"target"属性,但我也有这个解决方案的错误行为.
我的代码在IE和Firefox中运行良好,但返回false在Safari,Chrome和Opera中不起作用.通过不工作我的意思是在打开新窗口后遵循链接.
我想我可能是因为Google Maps V3环境......
编辑:要查看实际页面上的行为:
欢迎任何帮助!
Edit2:问题出在函数"MakeInfoWindowContent"中,它位于"gmaps3.js"中.我不使用DOM来创建元素(我使用字符串),因为必须将此HTML字符串传递给Google Maps(对于信息窗口 - 气球).实际上,在两个不同的地方创建了相同的链接.左边的一个,用DOM功能创建(如本问题所示),适用于所有浏览器,气球中有一个用HTML字符串创建,这个在Safari,Chrome和Opera中效果不佳(链接是在新窗口打开之后,即使返回false也是如此).
编辑3:仍然不知道为什么会发生这种情况......如果有人有想法,请告诉我!
阻止事件的默认操作可能有效吗?不确定 gmaps 是否以其他方式处理其信息窗口中的链接,如果没有,它应该可以工作。
更新:第一个示例不起作用。使用“内联”onclick 分配事件时,事件未传递。这个经过测试并发现可以工作。
function bindEvent(target, event, handler) {
if (typeof target.addEventListener != 'undefined') {
target.addEventListener(event, handler, false);
} else if (typeof target.attachEvent != 'undefined') {
target.attachEvent('on' + event, handler);
}
}
var link = document.createElement('a');
link.href = 'http://www.google.com/';
link.appendChild(document.createTextNode('Google'));
bindEvent(link, 'click', function (e) {
if (typeof e.preventDefault != 'undefined') {
// Common/W3C events
e.preventDefault();
}
// (Old) IE specific events
e.returnValue = false;
var target = e.target || e.srcElement;
window.open(target.href);
return false;
});
document.getElementsByTagName('body')[0].appendChild(link);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3784 次 |
| 最近记录: |