JS错误:预期的对象

时间:2011-05-17 15:48:50

标签: javascript

我加载了一个我在IE中开发的内部页面,在底部显示了一些JS错误: 它表示第107行字符6.我查看JScript文件,它有以下代码:

 function isLessThanStartDate(obj)
    {
     var startdate = new Date(document.getElementById('txtSD').value);
     var enddate = new Date(obj.value);
     var weekending = new Date(document.getElementById('txtWE').value);

     if (!(isDate(startdate)))
   {
        obj.style.backgroundColor="red";
        alert (obj.value + " is not a valid date!");
        obj.value="";
        return;
   }

     if (enddate < startdate)
      {
      obj.style.backgroundColor="red";
      alert ("End date: " + enddate + " cannot be less then start date: " + startdate);
      obj.value="";
      }
     else if (enddate > weekending)
     {
      obj.style.backgroundColor="red";
      alert ("End date: " + enddate + " cannot be greater then week ending date: " + weekending);
      obj.value="";
     }
      else
      {
      obj.style.backgroundColor="";
      }      
    }

107行是

所在的行
var weekending = new Date(document.getElementById('txtWE').value);

为什么抱怨?我没有看到它有什么问题......

3 个答案:

答案 0 :(得分:5)

通常情况下,错误会告诉您确切的错误和位置。这就是这种情况。

我们可以告诉我们什么是错误的。

  1. 首先,我们知道我们有document,因为如果我们没有,我们会遇到更大的问题,我们会先发现两行。抓一点。
  2. 接下来,我们知道传递给Date构造函数的值无关紧要。 new Date("foo")不会抛出任何错误,只会在收到报告Date时创建"Invalid Date"。即使new Date(null)也可以。
  3. 分配不能抛出此异常。
  4. 这让我们很难看出来。正如其他人所建议的那样,document.getElementById('txtWE')一定不能返回你期望的对象。了解这一点,请参阅此jsfiddle。如果我将id =“txtWE”的输入“中断”为任何其他ID,我就会收到你的错误。

    你确定txtWE在那里吗?

答案 1 :(得分:3)

如果您的错误在IE中,您可以右键单击页面和查看源。然后,检查该页面的第107行。它可能与“var weending ...”代码不同。或者,如果它实际上是您发布的107代码,则可能无法从txtWE值创建日期。你是否以任何方式验证了txtWE输入?

答案 2 :(得分:1)

从问题上的问题来看,错误是“需要对象”。这通常意味着您正在尝试访问属于null的属性。

如果document.getElementById('txtWE')返回null,那么第107行可能会这样做。当你只运行该代码时,在控制台,你得到一个元素,或者你得到null?换句话说,请检查页面中是否有一个ID(不是名称!)为txtWE的元素。