JQuery на поля ввода метаполе WordPress - PullRequest
1 голос
/ 28 августа 2010

У меня есть куча мета-блоков в моей теме WordPress.одним нажатием кнопки w / class = "meta_upload_button" я хочу запустить загрузчик мультимедиа по умолчанию.Благодаря некоторым онлайн-урокам эта часть в основном работает.Я пытаюсь адаптировать код для работы с несколькими парами ввода / кнопки.

<input type="text" />
<button type="button" class="meta_upload_button">Upload</button>

идентификаторы, имена и значения динамически генерируются классом MetaBox WPAlchemy.

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

var ww = $('#post_id_reference').text();

$('.meta_upload_button').each(function() {

 var button = $(this);

 $(this).click(function() {

  //test- result= changes border color on correct input
        button.prev('input').css("border","3px solid red");


  window.send_to_editor=window.send_to_editor_clone;
  tb_show('', 'media-upload.php?post_id=' + ww + '&type=image&TB_iframe=true');
  return false;
 });

  //my version of the send_to_editor
 window.send_to_editor_clone = function(html){
        //grabs the URL of the selected image
  imgurl = $('img',html).attr('src');

  forminput = button.prev('input');

        //changes the value on the LAST input 
  forminput.val(imgurl);
  tb_remove();
 }

}); //end each

Ответы [ 2 ]

0 голосов
/ 28 августа 2010

@ указательный палец - большое спасибо! Теперь проблема с моим использованием каждого имеет смысл, и я бы никогда этого не увидел. Я также поклялся бы, что попробовал нечто подобное кнопке which_, но сегодня я проснулся, увидел твой ответ - и бум это сработало!

var ww = $('input[name=post_ID]').val();

$('.meta_upload_button').each(function() {

    var button = $(this);

    $(this).click(function() {
        which_button = button;
        window.send_to_editor=window.send_to_editor_clone;
        tb_show('', 'media-upload.php?post_id=' + ww + '&type=image&TB_iframe=true');
        return false;
    });


    window.send_to_editor_clone = function(html){
        imgurl = $('img',html).attr('src');
        forminput = which_button.prev('input');
        forminput.val(imgurl);

        tb_remove();
    }

}); //end each

send_to_editor - еще одна из тех функций WordPress, в которой почти нет документации. но выше, мне нужно сохранить клонированный send_to_editor в функции click, чтобы он вызывался только при нажатии кнопок в моих метабоксах и не мешал кнопкам мультимедиа в обычном сообщении.

0 голосов
/ 28 августа 2010

ОК, я думаю, что вижу проблему.

$('.meta_upload_button').each

запускает тело функции один раз для каждой кнопки.Каждый раз, когда она запускается, переменная

window.send_to_editor_clone

устанавливается на некоторую функцию, которая должна заполнять текстовое поле.Но есть только одно окно , поэтому window.send_to_editor просто будет равно последнему назначенному значению.В данном случае это функция, в которой кнопка имеет последнее значение, которое она будет иметь - т. Е. Это последняя кнопка, поведение, которое вы описали.

Как это исправить?Я не совсем уверен.Вы застряли в возможности получить доступ к этой вещи только через window.send_to_editor (html) ?В идеале вы должны определить эту функцию только один раз, но определенную кнопку передать в нее в качестве параметра.

Поиск в поисках send_to_editor не говорит мне много о том, как с этим справиться.Вы могли бы сделать это следующим образом:

var ww = $('#post_id_reference').text();

var which_button;

$('.meta_upload_button').each(function() {

 var button = $(this);

 $(this).click(function() {
   which_button = button;    


  tb_show('', 'media-upload.php?post_id=' + ww + '&type=image&TB_iframe=true');
  return false;
 });
}); //end each

//my version of the send_to_editor
window.send_to_editor_clone = function(html){
  //grabs the URL of the selected image
  imgurl = $('img',html).attr('src');

  forminput = which_button.prev('input');

  //changes the value on the LAST input 
  forminput.val(imgurl);
  tb_remove();
}
window.send_to_editor=window.send_to_editor_clone;    

Это будет работать только в том случае, если window.send_to_editor будет вызван после обработчика щелчка.В противном случае, становится намного неприятнее иметь дело.Я думаю, это было бы возможно с помощью setTimeOut, но в этот момент он становится параллелизмом, о котором сложнее думать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...