繁体   English   中英

在javascript对象生成的链接中使用“this”

[英]Using 'this' inside a link generated by a javascript object

Javascript对我来说很不稳定,我似乎无法找到答案。 我有一些代码

var Scheduler = function(divid,startDate,mode){

    this.setHeader = function(){
          header.innerHTML = '<a href="#" onclick="this.showScheduler(1);">Show</a>';

    }

   this.showScheduler = function period(){

        ...
   }

};

我的问题是,如何将onclick放入HTML中,以便正确调用showScheduler函数以获取我正在使用的当前调度程序对象的相应实例?

我不会做你正在做的任何事情,但是按照你的方式使用代码,我会这样做(很多做和做:)):

var Scheduler = function(divid, startDate, mode){
    var that = this;

    this.setHeader = function(){
          header.innerHTML = '<a href="#">Show</a>';
          header.firstChild.onclick = function() { that.showScheduler(1); };
    }

   this.showScheduler = function period(){

        ...
   }
};

你应该使用这种类型的框架。 如果您不使用,那么您必须将每个调度实例声明为全局对象,并且您需要实例的名称才能从链接中调用它。 请看以下链接

http://developer.yahoo.com/yui/examples/event/eventsimple.html

它们只显示正在应用的功能,但您也可以执行此类操作

YAHOO.util.Event.addListener(myAnchorDom, "click", this.showScheduler,this,true);

myAnchorDom是achor标签dom对象。 这将使showScheduler函数在scheduler对象的范围内执行。

而不是使用innerHTML使用DOM方法。

尝试替换这个:

header.innerHTML = '<a href="#" onclick="this.showScheduler(1);">Show</a>';

有了这个:

var x = this; // create a closure reference
var anchor = document.createElement('a');
anchor.href= '#';
anchor.innerHTML = 'Show';
anchor.onclick = function() { x.showScheduler(1); }; //don't use onclick in real life, use some real event binding from a library
header.appendChild(anchor);

说明:

原始代码中的“this”指的是触发事件的元素,即锚点(“这个”对于像这样的事情而言是众所周知的问题。)解决方案是在正确的方法上创建一个闭包(这就是为什么你必须创建像上面的var x这样的东西,然后只留下传递参数的问题,这是通过将方法包装在另一个函数中完成的。

严格来说,将事件处理程序与addEventListener / attachEvent对绑定会更为可取(因为直接事件赋值会排除将多个处理程序分配给一个事件的能力),但如果你是JS的新手,最好使用像jquery这样的库来处理它。

您可以直接向头对象添加事件处理程序:

var me = this;

this.setHeader = function(){
          header.innerHTML = '<a href="#" onclick="this.showScheduler(1);">Show</a>';

header.addHandler("click", function(e) { me.showScheduler(1); });
    }

在传递函数的现场,这将引用头元素。

var Scheduler = function(divid, startDate, mode)
{
    var xthis = this;

    this.setHeader = function()
    {
          var lnk = document.createElement("a");
          lnk.addEventListener("click", xthis.showScheduler, false);
          lnk.innerText = "Show";
          lnk.setAttribute('href', "#");
          header.appendChild(lnk);
    }

   this.showScheduler = function period(){

        ...
   }
};

在onclick属性中使用“this”时,实际上是指锚标记对象。 试试这个,看它是否有效:

this.setHeader = function(){
      header.innerHTML = '<a href="#" onclick="Scheduler.showScheduler(1);">Show</a>';
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM