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

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

本文关键字:为什么 单击 超链接 选项 太多 任何 空白处 文档 位置 启动 代码      更新时间:2024-04-03

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

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

第二期我点击rss页面或rss链接中任意位置的次数;在下一次rss点击时,它会打开这么多选项卡。(例如,我在页面的空白处点击了3次,已经访问了2次rss链接;在下一次点击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);
    });     
}

您可以在附加到文档的另一个单击处理程序中附加单击事件处理程序。因此,当您单击任何位置时,都会在链接上附加一个处理程序。你可以有任何数量的处理程序,所以如果你在任何地方点击10次,那么你的链接上就会有10个处理程序,代码在点击链接时会运行10次。

您需要更改

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

$(document).ready(function(){

或更短的

$(function(){

编辑:如果你的链接是动态创建的,那么你需要使用.on而不是.click.

代替:

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

使用

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