wake-up-neo.com

So behandeln Sie mehrere Instanzen der Funktion "send_to_editor" js

Folgendes mache ich:

Ich habe einen WordPress-Medien-Upload mit Iframe-Popup hinzugefügt, wenn eine Schaltfläche oder ein Link angeklickt wurde. Und mit Klick auf Einfügen in Beitrag die Bild-URL auf einem Textfeld platziert.

send_to_editor() Funktion behandelt das Einfügen von Bildern 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('<div><img width="300" src="'+imgurl+'" alt="banner image" /></div>');
     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 Bild hochgeladen und klicken Sie auf Bild einfügen, um zu posten. Es funktioniert nicht.

Frage: Wie kann ich mehrere Instanzen von send_to_editor() erstellen und neue js-Funktionen für jeden Moment des Bild-Uploads einbinden, damit sie nicht in Konflikt geraten?

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('<img src="'+imgurl+'" >');    
     tb_remove();
     window.send_to_editor = original_send_to_editor;
}
4
Sisir

überschreiben Sie die Funktion send_to_editor nur, wenn Sie auf einen Link oder eine Schaltfläche klicken. Speichern Sie jedoch die alte Funktion, um sie wiederherzustellen. Versuchen Sie dies bei einem Klickereignis:

//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('<div><img width="300" src="'+imgurl+'" alt="banner image" /></div>');
     tb_remove();
     //restore old send to editor function
     window.send_to_editor = window.restore_send_to_editor;
}
7
Bainternet

Mein Ansatz ähnelte dem von @ Bainternet. Die Umstände waren jedoch etwas anders. Kurz gesagt, ich hatte mehrere Schaltflächen, die das Fenster "Medien hinzufügen" öffneten und die standardmäßige TinyMCE-Funktionalität beeinträchtigten.

  1. Erstellen Sie ein Objekt, in dem zwei Elemente gespeichert sind:

    var $state_manager = {
          active_item : 'null',
          default_send_to_editor: window.send_to_editor
    }
    
  2. Benutzerdefinierte Schaltflächen ändern den Wert von active_item, wenn auf Folgendes geklickt wird:

     $('.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 entweder eine benutzerdefinierte Arbeit durch oder rufen Sie die gespeicherte Standardfunktion auf und setzen Sie active_item nach Abschluss auf null.

    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 von active_item besteht darin, dass unterschiedliche Eingabefelder ausgewählt und mit der URL des hochgeladenen Elements gefüllt werden.

3
Welcher

Ich habe gerade die Funktion window.send_to_editor in die Funktion .click() gestellt

$('#upload_button_1').click(function() {
                            tb_show('','media-upload.php?type=image&amp;TB_iframe=true');

                            window.send_to_editor = function(html) {
                            imgurl = jQuery('img',html).attr('src');
                            // do some rock 
                            tb_remove();
                            }
                            return false;
});
1
l2aelba

Ich habe ein Plugin erstellt und es steht in Konflikt 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; 
    }); 
0
Lee