Wie behandelt man mehrere Instanzen von “send_to_editor” js function

Hier ist was ich mache:

Ich habe wordpress media upload mit iframe popup hinzugefügt, wenn eine Schaltfläche oder ein Link angeklickt wurde. Und mit einem Klick auf Einfügen in den Beitrag die Bild-URL in einem Textfeld platziert.

send_to_editor() function send_to_editor() verarbeitet die send_to_editor() in den Editor

 window.send_to_editor = function(html) { var imgurl = jQuery('img',html).attr('src'); current_item.siblings('.upload_image').val(imgurl); current_item.parent().prepend('
banner image
'); tb_remove(); }

Sie sehen also, dass der Standard send_to_editor bearbeitet und geändert wird. Jetzt, wenn ich versuche, das Bild von WordPress Editor hochgeladen Bild hochladen und klicken Sie auf Bild einfügen, um zu posten. Es funktioniert nicht.

Frage: Wie kann ich mehrere Instanzen von send_to_editor() oder parhaps erstellen und haken neue js function zu jedem Moment des Bild-Uploader, so dass sie nicht in Konflikt stehen?

Lösung:

 var original_send_to_editor = window.send_to_editor; window.send_to_editor = function(html) { var imgurl = jQuery('img',html).attr('src'); current_item.siblings('.upload_image').val(imgurl); //current_item.siblings('#logo').remove(); current_item.siblings('.image-preview').html(''); tb_remove(); window.send_to_editor = original_send_to_editor; } 

Solutions Collecting From Web of "Wie behandelt man mehrere Instanzen von “send_to_editor” js function"

überschreiben Sie die send_to_editor-function nur, wenn Ihre Verknüpfung oder Schaltfläche geklickt wird, aber speichern Sie die alte function, um sie wiederherzustellen, also versuchen Sie dies bei einem Klick-Event:

 //store old send to editor function window.restore_send_to_editor = window.send_to_editor; //overwrite send to editor function window.send_to_editor = function(html) { var imgurl = jQuery('img',html).attr('src'); current_item.siblings('.upload_image').val(imgurl); current_item.parent().prepend('
banner image
'); tb_remove(); //restore old send to editor function window.send_to_editor = window.restore_send_to_editor; }

Mein Ansatz war similer zu @ Bainternets. Die Umstände waren jedoch etwas anders. Lange Rede, kurzer Sinn: Ich hatte mehrere Schaltflächen, die das Fenster “Medien hinzufügen” öffneten und die Standardfunktionen von TinyMCE durchbrachen.

  1. Erstellen Sie ein Objekt, das 2 Elemente speichert:

     var $state_manager = { active_item : 'null', default_send_to_editor: window.send_to_editor } 
  2. Benutzerdefinierte Schaltflächen ändern den Wert von active_item beim Anklicken:

      $('.button').click(function(){ $state_manager.active_item = $(this).attr('data-unqiue-id'); // open the window and do whatever else you need }) 
  3. Überprüfen Sie den Status von active_item und führen Sie benutzerdefinierte Arbeiten aus oder rufen Sie die gespeicherte Standardfunktion auf, und setzen Sie active_item auf null, sobald Sie fertig sind.

     window.send_to_editor = function( html ) { if($state_manager.active_item === 'null') { //call the default $state_manager.default_send_to_editor( html ); }else{ //do some custom stuff here being sure to reset // active_item to 'null' once completed $state_manager.active_item = 'null'; } } 

Ein Vorteil des Speicherns des active_items besteht darin, verschiedene Eingabefelder anzusteuern und sie mit der URL zu dem hochgeladenen Element zu füllen.

Ich habe die function von .click() einfach in die .click() -function gestellt

 $('#upload_button_1').click(function() { tb_show('','media-upload.php?type=image&TB_iframe=true'); window.send_to_editor = function(html) { imgurl = jQuery('img',html).attr('src'); // do some rock tb_remove(); } return false; }); 

Ich habe ein Plugin erstellt und es konfligiert mit dem Add media on Editor. Also ändere ich folgendes:

 $('#upload_button').click(function() { tb_show('Upload a logo', 'media-upload.php?type=image&TB_iframe=true&post_id=0', false); //store old send to editor function window.restore_send_to_editor = window.send_to_editor; // Display the Image link in TEXT Field window.send_to_editor = function(html) { var image_url = $('img',html).attr('src'); $('.logofield').val(image_url); tb_remove(); window.send_to_editor = window.restore_send_to_editor; } return false; });