jquery在新窗口中打开链接不起作用

时间:2015-09-27 16:03:19

标签: jquery hyperlink safari document-ready

我的页面上有一个默认情况下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");}
    });
});

2 个答案:

答案 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调用之后再次调用附件函数,但我仍然使用我的上述解决方案。每次向页面添加新元素时,您仍然需要调用一个更改所有链接元素目标的函数。