Как обрабатывать несколько экземпляров функции «send_to_editor» js

Вот что я делаю:

Я добавил загрузку мультимедиа WordPress с всплывающим окном iframe при нажатии кнопки или ссылки. И с щелчком вставки в сообщение URL-адрес изображения помещается в текстовое поле.

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.parent().prepend('<div><img width="300" src="'+imgurl+'" alt="banner image" /></div>'); tb_remove(); } 

Итак, вы видите, что по умолчанию send_to_editor отредактирован и изменен. Теперь, когда я пытаюсь загрузить изображение из редактора WordPress, вы загрузите его и нажмите вставить изображение для публикации. Это не работает.

Вопрос: Как сделать несколько экземпляров send_to_editor() или создать или перехватить новую функцию js для каждого момента загрузки изображений, чтобы они не конфликтуют?

Решение:

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

Solutions Collecting From Web of "Как обрабатывать несколько экземпляров функции «send_to_editor» js"

только перезаписывайте функцию send_to_editor, когда ваша ссылка или кнопка нажимают, но сохраняют старую функцию для ее восстановления, поэтому попробуйте это на событии клика:

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

Мой подход был similer к @ Bainternet. Однако обстоятельства были несколько разными. Короче говоря, у меня было несколько кнопок, которые открывали окно «Добавить медиа», и оно ломало функциональность TinyMCE по умолчанию.

  1. Создайте объект, в котором хранятся 2 элемента:

     var $state_manager = { active_item : 'null', default_send_to_editor: window.send_to_editor } 
  2. Пользовательские кнопки изменят значение active_item при нажатии:

      $('.button').click(function(){ $state_manager.active_item = $(this).attr('data-unqiue-id'); // open the window and do whatever else you need }) 
  3. Проверьте статус active_item и выполните произвольную работу или вызовите сохраненную функцию по умолчанию и установите значение active_item равным 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'; } } 

Преимущество сохранения active_item заключается в том, чтобы направлять различные поля ввода и заполнять их URL-адресом загруженному элементу.

Я просто положил функцию window.send_to_editor в .click()

 $('#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; }); 

Я создал плагин и конфликтует с Add media on Editor. Поэтому я меняю следующее:

 $('#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; });