Javascript:使用动态参数从 onclick 事件调用对象函数/方法

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/14616253/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-26 22:06:43  来源:igfitidea点击:

Javascript: calling object function/method from onclick event, with dynamic argument

javascriptobjectdynamiconclickinvoke

提问by Dave

I'm trying to do this:

我正在尝试这样做:

<script>
var MyItem;

MyItem = new myobj('testobj');

function myobj(id)
{
     var _id = id;

     this.toggle = function()
     {
       ...
     }

     function draw()
     {
         document.body.innerHTML += "<a onclick='" + MyItem + ".toggle();'>link</a>";
     }

     draw();

}
</script>

I get "function is not defined", but can invoke MyItem.toggle() from console successfully. I've also tried:

我得到“函数未定义”,但可以从控制台成功调用 MyItem.toggle()。我也试过:

document.body.innerHTML += "<a onclick='(function(){" + MyItem + ".toggle();})()'>link</a>";

The anchor has to be dynamically created in javascript. How do I invoke the MyItem object method toggle() from the dynamically created anchor?

锚点必须在 javascript 中动态创建。如何从动态创建的锚点调用 MyItem 对象方法 toggle()?

ps, I'm typing js from memory, so if there are syntax errors I apologise.

ps,我是从内存中输入 js 的,所以如果有语法错误,我深表歉意。

回答by epascarello

Do not add event handlers and elements like that. Use DOM methods

不要添加事件处理程序和类似的元素。使用 DOM 方法

var anchor = document.createElement("a");
anchor.innerHTML = "link";
anchor.onclick = function(){ MyItem.toggle(); };
document.body.appendChild(anchor);

I actually think you are after something like this

我实际上认为你在追求这样的事情

var MyItem;

MyItem = new myobj('testobj');

function myobj(id) {
    var that = this;
    this.toggle = function () {
        alert(id);
    }
    function draw() {
        var anchor = document.createElement("a");
        anchor.innerHTML = "link";
        anchor.onclick = function () {
            that.toggle();
        };
        document.body.appendChild(anchor);
    }
    draw();
}

回答by Justin Bicknell

That won't work. You are trying to use an object like a string. Try the following:

那行不通。您正在尝试使用像字符串这样的对象。请尝试以下操作:

document.body.innerHTML += "<a onclick='(function(){MyItem.toggle();})()'>link</a>";