Wordpress - How to handle multiple instance of "send_to_editor" js function

only overwrite the send_to_editor function when your link or button is click but store the old function to restore it so try this on a click 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('<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;
}

My approach was similer to @Bainternet's. The circumstances were slightly different however. Long story short, I had multiple buttons that opened the Add Media window and it was breaking the default TinyMCE functionality.

  1. Create an object that stores 2 items:

    var $state_manager = {
          active_item : 'null',
          default_send_to_editor: window.send_to_editor
    }
    
  2. Custom buttons will change the value of active_item when clicked:

     $('.button').click(function(){
        $state_manager.active_item = $(this).attr('data-unqiue-id');
        // open the window and do whatever else you need
     })
    
  3. Check the status of active_item and either do custom work or call the stored default function and set active_item to null once done.

    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';
     }
    }
    

A benefit of storing the active_item is to target different input fields and populating them with the url to the uploaded item.