【问题标题】:asp.net ajax property value timestamp is undefinedasp.net ajax 属性值时间戳未定义
【发布时间】:2012-08-31 14:00:08
【问题描述】:

我在 asp.net ajax 中的值分配和检索有问题。时间戳的值未定义

代码:

 /// <reference name="MicrosoftAjax.js"/>

 Type.registerNamespace("LabelTimeExtender1");

 LabelTimeExtender1.ClientBehavior1 = function(element) {
 LabelTimeExtender1.ClientBehavior1.initializeBase(this, [element]);
 this._testelement=this.get_element();
 this._timestamp= this.get_element().attributes['TimeStamp'].value;
 alert(_timestamp);

},

 LabelTimeExtender1.ClientBehavior1.prototype = {
initialize: function() {
    LabelTimeExtender1.ClientBehavior1.callBaseMethod(this, 'initialize');
    setInterval (this.timer,1000);
    alert("after");

},
dispose: function() {        
    //Add custom dispose actions here
    LabelTimeExtender1.ClientBehavior1.callBaseMethod(this, 'dispose');
},
timer: function(){

   alert(this.timestamp);
            var splitdate=this._timestamp.split(/[:]+/);
            alert(splitdate);
            var date= new Date(this._timestamp);
            alert( date.toString());
            var datenow= new Date ();
            alert(datenow.toString());
            this._element.innerText=" ";
            alert(this._element);
              if(date.getUTCFullYear<datenow.getUTCFullYear)
            {
            alert("year");
             var myelement= this.get_element();
             myelement .innerHTML= date.getUTCFullYear.toString();
            }
            if(date.getUTCMonth<datenow.getUTCMonth)
            {
            alert("month");
            this.get_element().innerHTML=date.getUTCMonth.toString();
            }
            if(date.getUTCDay<datenow.getUTCDay)
            {
            this.get_element().innerHTML=date.getUTCDay.toString();
            }
            if(date.getUTCHours <datenow.getUTCHours )
            {
             this.get_element().innerHTML=date.getUTCHours .toString();
            }
            if(date.getUTCMinutes<datenow.getUTCMinutes)
            {
            this.get_element().innerHTML=date.getUTCMinutes.toString();
            }


},
   set_timestamp: function(value)
  {
  this._timestamp=value;
  },

    get_timestamp: function()
   {
   return this._timestamp;
   }



}
 LabelTimeExtender1.ClientBehavior1.registerClass('LabelTimeExtender1.ClientBehavior1',  Sys.UI.Behavior);

if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();

为什么_timestamp 的值未定义?

【问题讨论】:

    标签: javascript asp.net asp.net-ajax


    【解决方案1】:

    我建议将设置this._timestamp 的代码移到您的initialize 函数中。

    我的另一个建议是即使在您自己的代码中也使用 getter 和 setter 以确保封装。因此,警报实际上是alert(this.get_timestamp())。而且,在您的 initialize 函数中,您将调用 this.set_timestamp(this.get_element().attributes['TimeStamp'].value)

    感谢评论,我发现问题实际上出在 setInterval 调用中。当您调用window.setInterval(this.timer, 1000); 时,当调用timer 函数时this 指的是window,而不是您的对象。因此,请执行以下操作:

    var self = this;
    window.setInterval(function () { 
        self.timer(); 
    }, 1000);
    

    这将使timer() 内部的this 引用正确的对象。

    【讨论】:

    • 问题是,当我尝试访问计时器函数中的 this._timestamp 时,该值要么未定义,要么根本不起作用。仍然没有希望 alert(this.get_timestamp());这条线现在根本不运行。
    • 我真的累死了。请做点什么。
    • 您可以尝试在jsFiddle.net 中进行设置,但这可能会很困难。您可能希望通过jslint.com 运行您的代码,以确保没有语法错误。例如,第一个结束括号后有一个逗号,但应该有一个分号。
    • 不确定“您检查结果了吗”是什么意思。您可以自己检查结果。我使用的是console.log(),所以你需要使用浏览器的控制台。否则,分叉小提琴并将console.log更改为警报。另一件事:我不想要无限循环,所以我将 setInterval 替换为 setTimeout。
    • 我觉得这就是cmets的极限了,我其实是在工作,没时间聊天。小提琴应该给你指路。
    猜你喜欢
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    相关资源
    最近更新 更多