【问题标题】:JS- Call a method from a generated button for a specific objectJS-从为特定对象生成的按钮调用方法
【发布时间】:2017-07-13 15:07:22
【问题描述】:

我是编码新手,我正在寻找一种方法来从生成的按钮为我的数组的每个对象启动特定的原型方法

我有 json 数据要循环,并将每个对象包含在一个 js 数组中。

//我的数据有3个对象

var readArr = JSON.parse(myData)

var js_arr = [];

// 在对象数组上循环

for (var i = 0; i < readArr.length; i++) {

    var generatedObject = new Object();

//来自原型的init方法

    generatedObject.init(readArr[i].prop1, readArr[i].prop2, readArr[i].prop3, readArr[i].prop4, readArr[i].prop5,
            readArr[i].prop6, readArr[i].prop7, readArr[i].prop8);

    js_arr.push(generatedObject);

//生成一个 div,其中包含每个出现的按钮

    var newCntent = document.createElement('div');
    newCntent.id = readArr[i].prop1 + i;
    newCntent.className = "cntent";
    document.getElementById('zone_btn').appendChild(newCntent);

//在div里面创建一个按钮

    var newBtn = document.createElement('div');
    newBtn.id = i + readArr[i].prop1;
    newBtn.className = "etalonBtn";
    newBtn.innerHTML = readArr[i].prop1;
    document.getElementById(newCntent.id).appendChild(newBtn);

我的 Object 类上有一个原型方法,我想要的是为每个与按钮链接的对象启动该方法。 第一个生成的按钮将启动 js_arr[0] 的方法,第二个用于 js_arr[2],...如何编写当我单击按钮时,该方法必须由“数组的对象”调用实现了你的创作”

我不知道如何做到这一点我尝试了几件事:

newBtn.addEventListener('click', function () {

       read_arr[i].DisplayUpdate();
    });

};

(返回的 read_arr[i] 没有定义),所以我只想用这个现在著名的来改变 read_arr[i] :“允许你创建的数组的对象”! 我真的需要这方面的帮助......

感谢您的期待,并为这个学前英语感到抱歉。

【问题讨论】:

  • 你在哪里设置事件监听器?它在循环内吗?
  • 是的,这是个坏主意吗?这个概念是生成带有相关 onclick 事件的按钮,但我不知道它是否相关......

标签: javascript arrays object prototypejs


【解决方案1】:

问题是当你进入点击功能时(即 - 当实际点击按钮时)你已经脱离了循环,所以 js 不知道'read_arr[i]' 是什么。

您需要将'read_arr[i]' 作为参数传递给函数。 基本上是这样的:

newBtn.addEventListener('click', function (object) {
       object.DisplayUpdate();
    },js_arr[i]);

这将更改函数的签名,使其也接受一个参数 - object,并将 js_arr[i] 作为该参数传递。

希望有帮助

【讨论】:

  • 现在新问题,调试器返回:object.DisplayUpdate 不是函数,它似乎没有将我生成的对象识别为与我的类相似。
  • 我尝试在 onclick 事件上启动警报,例如 alert(JSON.stringify(object));它返回我 {"is Trusted":true} 而不是我的对象值,请问这是什么意思?再次对不起,我必须误解几件事......
【解决方案2】:

您还可以在循环中创建按钮时分配和绑定要调用的函数:

var newBtn = document.createElement('div');
    newBtn.id = i + readArr[i].prop1;
    newBtn.className = "etalonBtn";
    newBtn.innerHTML = readArr[i].prop1;
    newBtn.onclick = jsArr[i];

【讨论】:

    猜你喜欢
    • 2015-02-21
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 2018-10-08
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    相关资源
    最近更新 更多