jQuery onload - .load() - event not working with a dynamically loaded iframe

后端 未结 4 1720
忘了有多久
忘了有多久 2021-01-02 00:15

My script loads an iframe when the user clicks a button. I want to call another function after the iframe loads, but it\'s not working. The iframe does load normally, but

相关标签:
4条回答
  • 2021-01-02 00:18

    Try this:

    $("<iframe id='myId'></iframe>").appendTo("body")
        .attr('src', url)
        .load(function() 
         {
             callback(this);
         });
    

    Just added some chaining, created the element where the selector usually goes (this is possible), and appended it to the body.

    0 讨论(0)
  • 2021-01-02 00:24

    Seems somewhat similiar to the question here:

    jQuery .ready in a dynamically inserted iframe

    This way the Iframe element exists in the Dom with the append. Only when you set the Url will it load, by which point you've attached the load function you wish to tag on the end. So for your code

    $('#someButton').live('click', function () {
    
        $('body').append($('<iframe id="myIframe" width="100%"></iframe>'));
        $('#myIframe').attr('src',"https://www.mywebsite.com");
    
        $('#myIframe').load(function () {
            alert('iframe loaded');
        });
    
    });
    
    0 讨论(0)
  • 2021-01-02 00:27

    The reason your code example does not work is because you are binding to an element that does not exist, then placing that element into the DOM when it has no event handler attached to the load event. Try this:

    $('#someButton').live('click', function () {
        var $iframe = $('<iframe id="myIframe" src="" width="100%"></iframe>').load(function () {
            alert('iframe loaded');
        }).attr('src', 'https://www.mywebsite.com');
        $('body').append($iframe);
    });
    

    Or closer to your origional code, you can replace .load() with .live('load'):

    $('#myIframe').live('load', function () {
        alert('iframe loaded');
    });
    
    $('#someButton').live('click', function () {
        $('body').append('<iframe id="myIframe" src="https://www.mywebsite.com" width="100%"></iframe>');//notice I removed the $() around the append code as it is unnecessary
    });
    
    0 讨论(0)
  • 2021-01-02 00:35

    If the document you are loading in the iframe is something you control, try putting the load handler into that document. If you need the parent document to do something after the iframe loads you can call a function in the parent from the child:

    // in parent doc
    function myIframeLoaded() {
       // do something
    }
    
    // in iframe doc
    $(document).load(function() {   // or .ready()
       parent.myIframeLoaded();
    }
    
    0 讨论(0)
提交回复
热议问题