javascript - 使用 jQuery 在链接上添加功能

标签 javascript jquery html dom

我正在尝试创建多个 html 链接来用作按钮。我现在正在创建 15 个,将来可能需要添加更多,所以我想通过 JS 来完成。以下代码在屏幕上添加对象,但按钮不执行分配的功能。事实上,他们根本不做任何事情,他们只是转到index.html#。

function buttonCreate(){

var element = $(".left");

for (i in upgrades){
        a = $('<a>',{
        text: i,
        href: '#',
        id: i
    });
    var upgrade_button = $('#' + i);
    upgrade_button.click(function(){upgrade(i);return false;});
    a.addClass('myButton');
    a.appendTo(element);

    para = $('<p>',{
        text: "",
        id: i+"_upgrade"
    });
    para.appendTo(element);

    para2 = $('<p>',{
        text: "",
        id: i+"_income"
    });
    para2.appendTo(element);
    document.getElementById(i+"_upgrade").innerHTML = "You need " + Math.round(upgrades[i].cost).toLocaleString() + " to upgrade " + i;
    document.getElementById(i+"_income").innerHTML = "Next " + i + " give " + Math.round(upgrades[i].income).toLocaleString() + " passive income";

    }
}

我还尝试将该函数直接添加到新创建的链接元素中。

编辑:

我给你升级变量和升级函数:

var upgrades = {
'A': {
    cost: 100,
    income: 10
},
'B': {
    cost: 1000,
    income: 100
},
'C': {
    cost: 10000,
    income: 1000
};

函数:

function upgrade(type){
if ((points - upgrades[type].cost) >= 0) {
    points -= upgrades[type].cost;
    upgrades[type].cost *= upgrade_incr;
    pincome += upgrades[type].income;

    clearInterval(intervalVar);
    intervalVar = setInterval(function(){pas_incr(pincome/8);},125);
    //upgrades[type].income *= val_incr;

    display = Math.round(points).toLocaleString();
    document.getElementById("points").innerHTML = "Points: " + display;
    document.getElementById(type+"_upgrade").innerHTML = "You need " + Math.round(upgrades[type].cost).toLocaleString() + " to upgrade " + type;
    document.getElementById(type+"_income").innerHTML = "Each " + type +" gives " + Math.round(upgrades[type].income).toLocaleString() + " passive income";
    document.getElementById("pincome").innerHTML = "You have " + Math.round(pincome).toLocaleString() + " passive income";
    }
}

我同时使用 JS 和 Jquery 的事实是我刚刚学习了 jquery,并开始实现它。需要注意的是,我也无法让它与简单的 JS 一起工作。

最佳答案

您尝试在将按钮插入 DOM 之前查询按钮 (upgrade_button)。但是您的本地范围内已经有了该按钮 (a)。只需在创建按钮时添加 click 属性即可。

而不是:

   a = $('<a>',{
        text: i,
        href: '#',
        id: i
    });
    var upgrade_button = $('#' + i);
    upgrade_button.click(function(){upgrade(i);return false;});

尝试:

   var a = $('<a>',{
        text: i,
        href: '#',
        id: i,
        click: function(){upgrade(i);return false;}
    });

更新

TrueBlueAussie在注释中指出,您不能在 click 闭包中使用 i,因为它将采用您的 for 循环 在该时间点的最终值当实际调用 click 时。

新版本:

   var a = $('<a>',{
        text: i,
        href: '#',
        id: i,
        click: function(){ upgrade(this.id); return false; }
    });

关于javascript - 使用 jQuery 在链接上添加功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27188228/

相关文章:

Javascript 登场——从 Chrome 控制台到小书签

javascript - 关于 JavaScript 中的后备构造函数模式?

javascript - 创建 div 时添加空白

linux - 来自 ubuntu 服务器的图像路径

html - 文档树和DOM一样吗?

javascript - 在每帧中的 rAF 之前运行任务的可靠方法

javascript - 用我自己的(措辞?)替换 jquery 函数

javascript - 验证后显示错误消息 - jQuery Validate

javascript - 说事件发生在我们开始聆听之前是什么意思?

html - 如何关闭 HTML 中的自动换行?