2010-08-28 4 views
1

У меня есть куча мета-ящиков в моей теме Wordpress. по щелчку кнопки w/class = "meta_upload_button" Я хочу запустить загрузчик по умолчанию. благодаря некоторым онлайн-учебникам у меня есть эта часть, в основном работающая. Я пытаюсь адаптировать код для работы с несколькими парами ввода/кнопки.jquery on wordpress meta box поля ввода

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

идентификаторов, имена и значение все динамически генерируемый класс WPAlchemy METABOX.

проблема в том, что мой код меняет значение в последнем поле ввода текста независимо от того, на какую кнопку я нажимаю, что заставляет меня думать, что это проблема выбора 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 
+0

Чтобы это было легче подумать об этом вопросе, попробуйте добавить «button.prev (« вход »). Val ('test'); сразу после «button.prev (« вход »). css ...».Это поможет немного изолировать проблему, в зависимости от того, что произойдет. – forefinger

+0

Изоляция - это причина, по которой я поставил .css. я сделал, как вы сказали, и «test» правильно добавлен к правильному вводу. но результат от forminput.val (imgurl); Аккуисты идут в последнем! это результат пересечения iframe? – helgatheviking

ответ

0

Хорошо, думаю, я вижу, в чем проблема.

$('.meta_upload_button').each 

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

window.send_to_editor_clone 

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

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

Googling around для 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 это возможно, но в этот момент это становится проблемой параллелизма, о которой сложнее думать.

+0

спасибо! Свежие глаза иногда могут творить чудеса. Я отправил свой последний код в качестве ответа ниже. – helgatheviking

0

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

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 в функции щелчка, чтобы он вызывался только при нажатии кнопок в моих обменных пунктах и ​​не мешал кнопкам мультимедиа на обычной почте.

Смежные вопросы