2017-03-27 1 views
1

getElementById renvoie null mais la liste est remplie. Des suppositions de ce qui ne va pas?js getelementbyid renvoie la valeur null

HomePage.aspx et 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); 
     } 
    } 

Erreur de page: Uncaught TypeError: Impossible de lire la propriété 'options' de null à populateMap (Map.js: 19)

+0

Il n'y a probablement aucun élément à cet identifiant, ce qui est la raison pour laquelle 'getElementById' retourne' null' (il échoue en silence). –

+0

Je ne suis pas un gars ASP, mais vous devriez ajouter un tag asp.net ou asp.net-mvc à cela. D'une lecture naïve de cela, il n'est pas clair que la page HTML contiendrait en fait quelque chose avec l'ID DiveSiteList, juste un tas d'IDs sur le DS.DiveSiteID. –

+0

avez-vous essayé d'utiliser 'id' au lieu de' ID' (c'est-à-dire en minuscules). Votre JS est-il également enveloppé dans une attente en attente? De même, vous utilisez 'var DiveSiteList2' mais plus tard' DiveSiteList' .. est-ce une faute de frappe? – haxxxton

Répondre

0

S'il vous plaît Check it changer juste ici:

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>

+0

cela n'a pas fonctionné, mais m'a donné l'idée de regarder le code source de la page, et il se trouve que l'ID de la zone de liste a été répertorié comme "ContentPlaceHolder1_DiveSiteList" –