首页 文章

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

提问于
浏览
36

我试图做一个事件,当页面加载时,它将执行事件 . 但问题是当我转到其他函数,但同一页面时,它会在该变量上出现null错误 . 执行此代码时没有问题,但是当我在代码的其他部分时,会发生此错误 .

未捕获的TypeError:无法读取null的属性“value”

$(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(); 


 });

6 回答

  • 6

    我不确定哪一个是错的,因为你没有提供你的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 或某种组合的元素 .

    因此,JavaScript无法读取不存在的值的值 .

    EDIT

    如果要先检查元素是否存在,可以为每个元素使用if语句:

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

    如果你想要或根本没有其他声明,你显然可以更改else语句,但这完全取决于首选项 .

  • 1

    使用||更简单,更简洁...:

    $(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(); 
    
    
    });
    
  • 40

    添加一张支票

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

    我的错误是我将Javascript文件(标记)保留在html声明之上 .

    它的工作原理是将js脚本标记放在正文体内的底部 . (我没有加载页面的脚本 . )

  • 0

    将“ MainContent_ ”添加到ID值!

    示例:(错误)

    document.getElementById("Password").value = text;
    

    (好!)

    document.getElementById("**MainContent_**Password").value = text;
    
  • 2

    您可以添加TimeOut来验证对象,而不是文档或$(文档)来避免JQuery . 在加载页面中的所有对象和其他事件后执行TimeOut ...

    setTimeout(function () { 
    
    var str = document.getElementById("cal_preview").value;
    var str1 = document.getElementById("year").value;
    ....
    ....
    ....
    
    }, 0);
    

相关问题