我的页面上有一个默认情况下checked
页面加载的复选框,指示所有页面链接是在同一窗口或新标签/窗口中打开(基于用户的浏览器设置)。如果选中此框,则链接将在新选项卡/窗口中打开,如果未选中,则会在同一窗口中打开。非常简单。
HTML
<label>Open links in new page:
<input type="checkbox" id="link-pref" checked><span></span>
</label>
使用jquery,我在$(document).ready()
中有一个函数,它将执行根据复选框状态正确打开链接的工作。
的Javascript
$(document).ready(function(){
$("a").click(function(){
if ($('#link-pref').is(":checked")){$(this).attr("target","_blank");}
else{$(this).attr("target","_parent");}
});
});
我遇到的问题是它似乎偶尔在桌面浏览器中工作,而在Safari(移动设备)中似乎根本不起作用。无论是否选中此框,链接都会在同一窗口中打开。
根据我的研究,这应该是正常的,如果选中该复选框,应该在新页面中打开此页面上的所有链接。但事实并非如此,特别是在Safari-mobile中。思想,想法?
更新:似乎在Safari中没有相应打开的唯一链接是那些使用ajax调用加载到div中的链接。 ajax调用是在$(document).ready()
块中的链接打开语句之前进行的,所以我仍然认为没有理由不这样做。
的Javascript
$(document).ready(function(){
$.ajax({url: "links.cgi",
success: function(result){
$('#linktable').html(result);
}});
$("a").click(function(){
if ($('#link-pref').is(":checked")){$(this).attr("target","_blank");}
else{$(this).attr("target","_parent");}
});
});
答案 0 :(得分:1)
W3C说每个html属性都必须有一个值。除非您的页面是html5(在这种情况下,某些浏览器可能无法正确呈现),否则此代码:
<input type="checkbox" id="link-pref" checked>
应该是:
<input type="checkbox" id="link-pref" checked="checked">
如果省略该值,则某些brosers无法理解您的标记代码。
答案 1 :(得分:1)
问题是,一旦您点击链接,它就会在您的代码执行之前开始打开链接。当复选框被更改时,我会更改目标属性,而不是链接点击。
$('#link-pref').change(function(){
if ($('#link-pref').is(":checked")){$('a').attr("target","_blank");}
else{$('a').attr("target","_parent");}
})
编辑:事件未附加到您的ajax生成的元素,因为附件发生在页面加载上。如果你想把事件附加到它们,你必须在你的ajax调用之后再次调用附件函数,但我仍然使用我的上述解决方案。每次向页面添加新元素时,您仍然需要调用一个更改所有链接元素目标的函数。