2014-02-27 50 views
28

我在这段代码中收到错误,我试图做一个事件,当页面加载时,它会执行事件。但问题是,当我去其他功能,但相同的页面,它会得到该变量的空错误。当我执行此代码时,它没有问题,但是当我在代码的其他部分发生此错误时。

未捕获TypeError:无法读取null的属性值'

遗漏的类型错误:不能为空的读取属性“价值”

$(document).ready(function(){ 


     var str = document.getElementById("cal_preview").value; 
     var str1 = document.getElementById("year").value; 
     var str2 = document.getElementById("holiday").value; 
     var str3 = document.getElementById("cal_option").value; 


     if (str=="" && str1=="" && str2=="" && str3=="") 
      { 
      document.getElementById("calendar_preview").innerHTML=""; 
       return; 
      } 
      if (window.XMLHttpRequest) 
      {// code for IE7+, Firefox, Chrome, Opera, Safari 
      xmlhttp=new XMLHttpRequest(); 
      } 
      else 
      {// code for IE6, IE5 
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
      } 

      xmlhttp.onreadystatechange=function() 
      { 
      if (xmlhttp.readyState==4 && xmlhttp.status==200) 
       { 
       document.getElementById("calendar_preview").innerHTML=xmlhttp.responseText; 
       } 
      } 

     var url = calendar_preview_vars.plugin_url + "?id=" + str +"&"+"y="+str1+"&"+"h="+str2+"&"+"opt="+str3; 
     xmlhttp.open("GET",url,true); 
     xmlhttp.send(); 


}); 
+1

请发布您的随机HTML –

+2

你确定具有前四个ID的元素存在?在你的ready函数中放置一个'debugger;'语句,看看哪一行会抛出错误。 –

+0

它们确实存在,当调用这个函数时没有问题,但是当你在其他函数上时,这是它有错误的时间。 – user2901740

回答

30

我不确定其中哪些是错误的,因为你没有提供你的HTML,但其中的一个不存在:

var str = document.getElementById("cal_preview").value; 
var str1 = document.getElementById("year").value; 
var str2 = document.getElementById("holiday").value; 
var str3 = document.getElementById("cal_option").value; 

有或者与ID cal_previewyearholidaycal_option,或一些combina没有元素灰。

因此,JavaScript无法读取不存在的东西的值。

编辑

如果你想检查元件首先存在,你可以使用一个if语句每个:

var str, 
element = document.getElementById('cal_preview'); 
if (element != null) { 
    str = element.value; 
} 
else { 
    str = null; 
} 

你可以很明显,如果你想或更改else语句根本没有别的说法,但这都是关于偏好。

+0

我认为你得到我的观点,我试图把那里的验证,如果null,但没有奏效。是否有可能验证价值是否存在?我理解正确吗? – user2901740

+0

你想只检查它是否存在,如果不存在或什么也不做,或试图找出它认为不存在的那一个? – Anonymous

+0

我想检查它们是否都存在,如果不跳过这个过程。 – user2901740

6

更简单,更简洁。 ...:

$(document).ready(function(){ 


    var str = ((document.getElementById("cal_preview")||{}).value)||""; 
    var str1 = ((document.getElementById("year")||{}).value)||""; 
    var str2 = ((document.getElementById("holiday")||{}).value)||""; 
    var str3 = ((document.getElementById("cal_option")||{}).value)||""; 


    if (str=="" && str1=="" && str2=="" && str3=="") 
     { 
     document.getElementById("calendar_preview").innerHTML=""; 
      return; 
     } 
     if (window.XMLHttpRequest) 
     {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
     } 
     else 
     {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 

     xmlhttp.onreadystatechange=function() 
     { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
      { 
      document.getElementById("calendar_preview").innerHTML=xmlhttp.responseText; 
      } 
     } 

    var url = calendar_preview_vars.plugin_url + "?id=" + str +"&"+"y="+str1+"&"+"h="+str2+"&"+"opt="+str3; 
    xmlhttp.open("GET",url,true); 
    xmlhttp.send(); 


}); 
+1

谢谢!这正是我所需要的。 –

2

添加复

if (document.getElementById('cal_preview') != null) { str = document.getElementById("cal_preview").value; }

0

我的错误是,我是保持HTML声明之上的JavaScript文件(标签)。

它通过将js脚本标签放置在主体内部的身体底部来工作。 (我没有在页面加载脚本。)

相关问题