2014-02-27 24 views
28

Ich erhalte Fehler in diesem Code lesen, ich versuche, ein Ereignis zu tun, wo in, wenn die Seite geladen ist, wird es das Ereignis tun. Aber das Problem ist, wenn ich zu einer anderen Funktion gehe, aber die gleiche Seite, es wird ein Fehler von Null für diese Variable. Es hat kein Problem, wenn ich diese Codes ausführe, aber wenn ich auf anderen Teil meiner Codes bin, tritt dieser Fehler auf.

Uncaught Typeerror: kann Eigenschaft ‚Wert‘ von null

Uncaught Typeerror: kann Eigenschaft ‚Wert‘ von 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

Bitte senden Sie Ihre begleitenden HTML –

+2

Sie sicher, dass die Elemente mit den ersten vier IDs existieren? Setzen Sie eine 'debugger;' -Anweisung in Ihre Ready-Funktion und sehen Sie, welche Zeile einen Fehler auslöst. –

+0

Es gibt sie, es hat kein Problem damit, wenn diese Funktion aufgerufen wird, aber wenn man auf andere Funktion sind, ist dies die Zeit, dass es Fehler aufweist. – user2901740

Antwort

30

Ich bin nicht sicher, welche von ihnen ist falsch gelesen, weil Sie nicht Ihre HTML lieferten, aber einer von ihnen ist nicht vorhanden:

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; 

Es ist entweder kein Element mit der ID cal_preview, year, holiday, cal_option, oder einer Kombina tion.

Daher ist JavaScript nicht in der Lage, den Wert von etwas zu lesen, die nicht existieren.

EDIT:

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

Sie könnten natürlich die else-Anweisung ändern, wenn Sie wollen, oder:

Wenn Sie, dass das Element zunächst überprüfen möchten existiert, erhalten Sie eine if-Anweisung für jede verwenden könnte habe keine andere Aussage, aber das ist alles über Präferenz.

+0

Ich denke, dass Sie meinen Punkt, ich habe versucht, eine Validierung dort als ob null, aber nicht funktioniert. Ist es möglich zu überprüfen, ob ein Wert existiert oder nicht? Habe ich es richtig verstanden? – user2901740

+0

Sie möchten nur überprüfen, ob es existiert und nichts tun, wenn es nicht oder versuchen, herauszufinden, welche es nicht existiert? – Anonymous

+0

Ich möchte überprüfen, ob alle vorhanden sind, wenn Sie den Prozess nicht überspringen. – user2901740

6

einfacher und prägnanter mit || ...:

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

Danke! Genau das habe ich gebraucht. –

2

Fügen Sie einen Scheck

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

0

Mein Fehler war, dass ich die Javascript-Datei (Tag) über die HTML-Erklärung wurde zu halten.

Es funktionierte durch den js Script-Tag an der Unterseite des Körpers im Innern des Körpers platziert. (Ich habe das Skript beim Laden der Seite nicht.)

Verwandte Themen