最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - HTML onload not working - Stack Overflow

programmeradmin4浏览0评论

I'm attempting to use html onload event to trigger javascript, but is not working. The original code was:

html:

<div id='map' onload="generateMap.createMap();"></div>

JS:

var generateMap = function(){
return{
    createMap: function(){
        console.log(this.attr('id'));
        element = this.attr('id');
        navigator.geolocation.getCurrentPosition(initialize);
    }
};

}

In an attempt to test, I changed the html to:

<div id='map' onload="alert('test');"></div>

Can anyone tell me why nothing is working?

I'm attempting to use html onload event to trigger javascript, but is not working. The original code was:

html:

<div id='map' onload="generateMap.createMap();"></div>

JS:

var generateMap = function(){
return{
    createMap: function(){
        console.log(this.attr('id'));
        element = this.attr('id');
        navigator.geolocation.getCurrentPosition(initialize);
    }
};

}

In an attempt to test, I changed the html to:

<div id='map' onload="alert('test');"></div>

Can anyone tell me why nothing is working?

Share Improve this question asked Aug 26, 2014 at 23:52 Stephen AdkinsStephen Adkins 651 gold badge1 silver badge7 bronze badges 1
  • what is "initialize" ? – Liam Commented Aug 27, 2014 at 0:13
Add a ment  | 

4 Answers 4

Reset to default 8

First, the onload attribute is not valid for a div tag. You most likely intended to place the onload in the body tag.

Unfortunately, that's not the only problem.

In your onLoad you are referencing generateMap as if it is an object with method createMap. However, this is not the case. You have assigned generateMap to an anonymous function.

To get your code working, generateMap needs to be an object with method createMap.

You just need to set it as an object in the first place:

var generateMap = {
    createMap: function(){
        console.log(this.attr('id'));
        element = this.attr('id');
        navigator.geolocation.getCurrentPosition(initialize);
    }
};

Or if you need to retain the anonymous function for whatever reason, you can use an immediately executing function:

var generateMap = (function(){
    return {
        createMap: function(){
            console.log(this.attr('id'));
            element = this.attr('id');
            navigator.geolocation.getCurrentPosition(initialize);
    }
})();

There is no onload event for a div. You can use the script tag just after the div tag to emulate onload behavior.

Use this

<head>
    <meta charset="utf-8">
    <script type="text/javascript">
        var generateMap = {
            createMap: function(element) {
                navigator.geolocation.getCurrentPosition(initialize);
            }
        };
    </script>
</head>

<body>
    <div id='map'></div>
    <script type="text/javascript">
        generateMap.createMap('map');
    </script>
</body>

Assuming Chrome.. div tags do not have an onload event. Check the following two jsfiddles:

Does not work: http://jsfiddle/o81e4dkr/

Works: http://jsfiddle/p3osqrdn/

I do not know of a way to have an event fired when a div is loaded, unless it is being loaded in via jQuery.load(), in which case you can use the callbacks.

If you're using jQuery then I like the following function which adds onload capability to all tags:

$(document).ready (function () {
    jQuery.each ($("[onload]"), function (index, item) {
        $(item).prop ("onload").call (item);
        return false;
    });
});
发布评论

评论列表(0)

  1. 暂无评论