jquery 在新 window 中打开链接无效

jquery open links in new window not working

我有一个带有复选框的页面,该复选框在页面加载时默认为 checked,指示所有页面 link 是否将在相同的 window 或新的 tab/window 中打开](基于用户的浏览器设置)。如果选中此框,link 将在新的 tab/window 中打开,如果未选中,它们将在相同的 window 中打开。很简单。

HTML

<label>Open links in new page:
<input type="checkbox" id="link-pref" checked><span></span>
</label>

使用 jquery,我在 $(document).ready() 中有一个函数,它将根据复选框状态适当地执行打开 links 的工作。

Javascript

$(document).ready(function(){
    $("a").click(function(){
        if ($('#link-pref').is(":checked")){$(this).attr("target","_blank");}
        else{$(this).attr("target","_parent");}
    });
});

我遇到的问题是,它似乎偶尔在桌面浏览器中工作,而在 Safari(移动)中似乎根本不工作。 link 只在同一个 window 中打开,无论该框是否选中。

根据我的研究,这应该有效,并且如果选中该框,应该在新选项卡中打开此页面上的所有 link。但事实并非如此,尤其是在 Safari-mobile 中。想法、想法?

更新:似乎唯一没有在 Safari 中相应打开的 link 是使用 ajax 调用加载到 div 中的那些。 ajax 调用是在 $(document).ready() 块中的 link-opening 语句之前进行的,所以我仍然看不出为什么这不起作用。

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");}
    });
});

W3C 规定每个 html 属性必须有一个值。除非您的页面是 html5(在这种情况下,某些浏览器可能无法正确呈现),此代码:

<input type="checkbox" id="link-pref" checked>

应该是:

<input type="checkbox" id="link-pref" checked="checked">

如果你省略了这个值,有些兄弟无法理解你的标记代码。

问题是一旦您单击 link,它会在您的代码执行之前开始打开 ​​link。我会在更改复选框时更改目标属性,而不是在 link 单击时更改目标属性。

$('#link-pref').change(function(){
    if ($('#link-pref').is(":checked")){$('a').attr("target","_blank");}
    else{$('a').attr("target","_parent");}
})

编辑:事件未附加到您的 ajax 生成的元素,因为附件发生在页面加载时。如果您想将事件附加到它们,则必须在 ajax 调用后再次调用附件函数,但我仍然会使用上述解决方案。不过,每次向页面添加新元素时,您仍然需要调用一个函数来更改所有 link 元素的目标。