2017-03-27 2 views
1

getElementById gibt null zurück, aber die Liste ist ausgefüllt. Irgendwelche Vermutungen darüber, was falsch ist?js geelementbyid gibt null zurück

homepage.aspx und Map.js

var Center = { lat: 20.452425, lng: -68.545446 }; 
 

 
function initMap() { 
 
    
 
    
 
    map = new google.maps.Map(document.getElementById('map'), { 
 
     zoom: 3, 
 
     center: Center 
 
    }); 
 
    populateMap() 
 
    function populateMap() 
 
    { 
 
     var DiveSiteList2 = document.getElementById("DiveSiteList") 
 
     for (var i = 0; i < DiveSiteList2.options.length; ++i) 
 
     {...} 
 
     
 

 
    } 
 
    }
<div id="ListHolder"> 
 
    <asp:ListBox class="ListBox" ID="DiveSiteList" runat="server"></asp:ListBox> 
 
</div>

HomePage.aspx.cs

private DiveManager.DiveManager Manager; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Manager = new DiveManager.DiveManager(); 
     BindDiveList(); 
    } 

    private void BindDiveList() 
    { 
     foreach (DiveSite DS in Manager.MasterDiveSiteList) 
     { 
      ListItem Item = new ListItem(); 
      Item.Text = DS.DiveSiteName; 
      Item.Attributes.Add("Name", DS.DiveSiteName); 
      Item.Attributes.Add("Latitude", DS.Latitude.ToString()); 
      Item.Attributes.Add("Longitude", DS.Longitude.ToString()); 
      Item.Attributes.Add("ID", DS.DiveSiteID.ToString()); 
      DiveSiteList.Items.Add(Item); 
     } 
    } 

Seitenfehler: Uncaught Typeerror: kann Eigenschaft 'Optionen' von null lesen bei populateMap (Map.js: 19)

+0

Es gibt wahrscheinlich kein Element, weshalb 'getElementById' gibt' null' (es nicht still). –

+0

Ich bin kein ASP-Typ, aber Sie sollten ein asp.net oder asp.net-mvc-Tag hinzufügen. Aus einer naiven Lektüre ist nicht klar, dass die HTML-Seite tatsächlich irgendetwas mit der ID DiveSiteList enthalten würde, nur ein paar IDs, die auf der DS.DiveSiteID basieren. –

+0

haben Sie versucht, ID statt ID (dh Kleinbuchstaben) zu verwenden. Auch ist Ihr JS in eine Onload-Wartezeit verpackt? Ähnlich verwenden Sie 'var DiveSiteList2', aber später' DiveSiteList' ... ist das ein Tippfehler? – haxxxton

Antwort

0

Überprüfen Sie es bitte Gerade ändern:

var DiveSiteList2 = document.getElementById('<%= DiveSiteList.ClientID %>') 

var Center = { lat: 20.452425, lng: -68.545446 }; 
 

 
function initMap() { 
 
    
 
    
 
    map = new google.maps.Map(document.getElementById('map'), { 
 
     zoom: 3, 
 
     center: Center 
 
    }); 
 
    populateMap() 
 
    function populateMap() 
 
    { 
 
     var DiveSiteList2 = document.getElementById('<%= DiveSiteList.ClientID %>') 
 
     for (var i = 0; i < DiveSiteList2.options.length; ++i) 
 
     {...} 
 
     
 

 
    } 
 
    }
<div id="ListHolder"> 
 
    <asp:ListBox class="ListBox" ID="DiveSiteList" runat="server"></asp:ListBox> 
 
</div>
mit dieser ID

+0

es hat nicht funktioniert, aber gab mir die Idee, den Seitenquellcode zu betrachten, und es stellt sich heraus, dass die Listbox ID wurde als "ContentPlaceHolder1_DiveSiteList" aufgeführt –