He sido frustated tratando de encontrar la mejor manera para la carga y descarga de algún archivo JS a través de jQuery, este último era lo que puedo hacer:

  $("#button").live("click", function(){
    var pl = $(this).attr('rel');
    $.getScript('' + siteAddress + 'min/?js=fjs'+ pl +'', function() {
       $('#container').load(""+ siteAddress +"load/"+ pl +"/");    
    });
  });

Lo que quiero hacer es cargar alguna página a través de jQuery, y al mismo tiempo va a incluir el adecuado archivo JS externo para la página actual que se ha cargado, que funcionan muy bien para la primera vez, pero cuando hago clic en el botón de nuevo, la última JS todavía cargado, por lo que se activará la función en el interior de archivo JS el doble de tiempo para la misma página.

He sido de usar .anexar, también por el cambio <script> atributo y crear dynamicaly <script> elemento pero aún así, todo lo que tengo es el mismo resultado.

InformationsquelleAutor dedudit | 2011-07-18

2 Comentarios

  1. 5

    Que no se puede «descargar» de JavaScript. Una vez que se carga, se carga. No hay deshacer.

    Sin embargo, usted puede separar los controladores de eventos. Ver: http://api.jquery.com/unbind/

    live() es un caso especial para unbind(), aunque. Evento en vivo controladores están conectados a document en lugar del elemento, así que tienes que quitar el controlador así:

    $(document).unbind('click');

    Sin embargo, que probablemente iba a quitar más manipuladores que sólo el que está en cuestión, por lo que usted puede hacer una de dos cosas: 1) nombre de la función de controlador o 2) crear un espacio de nombres.

    Nomenclatura función de controlador de

    function myClickHandler(){
        var pl = $(this).attr('rel');
        $.getScript('' + siteAddress + 'min/?js=fjs'+ pl +'', function() {
           $('#container').load(""+ siteAddress +"load/"+ pl +"/");    
        });
    }
    
    $("#button").live("click", myClickHandler);
    
    //And later ...
    
    $(document).unbind('click', myClickHandler);

    Namespacing

    $("#button").live("click.myNamespace", function(){
        var pl = $(this).attr('rel');
        $.getScript('' + siteAddress + 'min/?js=fjs'+ pl +'', function() {
           $('#container').load(""+ siteAddress +"load/"+ pl +"/");    
        });
    });
    
    //And later...
    
    $(document).unbind('click.myNamespace');

    ACTUALIZACIÓN:

    Como @RTPMatt menciona a continuación, die() realidad es más apropiado. El método descrito anteriormente funciona, pero die() es más fácil de usar. Sin embargo, con die() debe coincidir con el selector exactamente a la que se utiliza cuando se llama live() o los resultados pueden ser impredecibles:

    $("#button").live("click", function(){
        var pl = $(this).attr('rel');
        $.getScript('' + siteAddress + 'min/?js=fjs'+ pl +'', function() {
           $('#container').load(""+ siteAddress +"load/"+ pl +"/");    
        });
    });
    
    //And later ...
    
    $('#button').die('click');
  2. 0

    Usted podría incluso tener un «marcador de posición de la función» y comprobar su existencia antes de cargar de nuevo el script. Pero, en primer lugar, creo que sería mejor para cargar la página y sólo después de cargar el script externo (y sólo si es necesario)

    $("#button").live("click", function()
    {
      var pl = $(this).attr('rel');
      //now we load the page, and then the "complete" callback function runs
      $('#container').load(""+ siteAddress +"load/"+ pl +"/", function() 
      {
        we check if the function is present into memory
        if (typeof window["page_" + pl + "_init"] == 'undefined')
        {
          //function not found, we have to load the script
          $.getScript('' + siteAddress + 'min/?js=fjs'+ pl +'');
        }
      });
    });

    En el script externo deberá tener la función

    function page_abcde_init()
    {
      //this is just a place holder, or could be the function used
      //to initialize the loaded script (sort of a document.ready)
    }

    Donde «abcde» de «page_abcde_init()» es el valor del clic elemento var pl = $(this).attr('rel');

Dejar respuesta

Please enter your comment!
Please enter your name here