为什么首先单击文档中空白 space 中的任意位置来启动代码而不是单击超链接以及为什么打开了太多选项卡?

Why first click anywhere in empty space in document initiate the code instead of clicking on hyperlink and why too many tabs open?

我在移动应用程序中有 RSS 提要(rss 页面)列表。我想在不同的选项卡(在 Android 中)和 iOS 中单击后打开每个提要 link 想要打开 _blank。下面的代码对我来说很好用。

第一个问题是我需要在rss页面的空白处点击一次,然后就可以了;否则应用程序将自己替换为外部 hyperlink 网页。

第二期 与我点击 rss 页面或 rss 任意位置的次数一样多 links;在下一个 rss 上单击它会打开那么多选项卡。 (例如,我在页面的空白 space 中单击了 3 次,并且已经访问了 rss links 2 次;在下一次 hyberlink 单击时,它会尝试打开 5 个选项卡)。

index.html

<script>
$(document).click(function(e){
    $('a').click(function(){
        var myurl= $(this).attr('href');
        if(myurl.indexOf('/') > -1)
        {
            //alert('linked found');
            if (typeof navigator !== "undefined" && navigator.app) 
            {
                navigator.app.loadUrl(myurl, {openExternal: true});
            } 
            else 
            {   
                window.open(myurl, "_blank");
            }   
            myurl='';
            return false;
        }
    });
});

$(document).ready(function (){
    $("#btnnewgrant").click(rssfeedbtn);
});
</script>

HTML:

<div data-role="page" id="rssfeed">
    <div data-role="header"> 
        <h1>Grants New Opportunity List by Agency</h1>
    </div>
    <div data-role="content">   
        <div class="myfeedheading">Grants New Opportunity </div>
        <div id="busy1" style="color:#000000"><img src="ajaxloader.gif"></img>
    </div>

    <div id="myfeeddiva" class="myfeed"></div>
    </div>
<div>

feed.js

function rssfeedbtn()
{
    $('#myfeeddiva').empty();
    $.mobile.changePage("#rssfeed", {reverse:false, transition:"slide"});
    var rssurl='http://www.ddd.ddd/rss/asdd.xml';
    $.get(rssurl, function(data) {
        var $xml = $(data);
        var mytext="";
        $xml.find("item").each(function() {
            mytext+='<a href="';
            mytext+=$(this).find("link").text();
            mytext+='">';
            mytext+=$(this).find("title").text();
            mytext+='</a>';
            mytext+='<br>';
            mytext+=$(this).find("pubDate").text();
            mytext+='<br>';
            mytext+='<br>';
        }); 
        $('#busy1').hide();
        $('#myfeeddiva').append(mytext);
    });     
}

您在附加到文档的另一个点击处理程序中附加了点击事件处理程序。因此,当您单击任意位置时,处理程序将附加到您的 links。您可以有任意数量的处理程序,因此如果您在任何地方单击 10 次,那么您的 link 上将有 10 个处理程序,并且代码将 运行 单击 link 10 次。

你需要改变

$(document).click(function(e){

$(document).ready(function(){

或更短

$(function(){

编辑:如果您的 link 是动态创建的,那么您需要使用 .on 而不是 .click。

而不是:

$('a').click(function (e) {

使用

$('body').on('click','a',function (e) {