2014-06-07 69 views
3

我正在製作一個顯示圖像的Wordpress小部件,並上傳/更改此圖像我使用Wordpress媒體上傳器。

這是我使用的管理形式標記:

<p class="media-control" 
    data-title="Choose an image" 
    data-update-text="Choose image"> 

    <input class="image-url" name="image-url" type="hidden" value=""> 

    <img class="image-preview" src=""><br> 
    <a class="button" href="#">Pick image</a> 
</p> 

當我點擊「.media-控制」出現上傳,我可以選擇一個圖像。但是當我選擇了一個圖像「.image-preview」和「.image-url」沒有更新。

這裏是我的javascript:http://jsfiddle.net/etzolin/DjADM/

一切工作按預期除了這些行:

jQuery(this).parent().find('.image-url').val(attachment.url); 
jQuery(this).parent().find('.image-preview').attr('src', attachment.url); 

當我寫他們喜歡這個,輸入值設置和圖像預覽更新:

jQuery('.media-control .image-url').val(attachment.url); 
jQuery('.media-control .image-preview').attr('src', attachment.url); 

但是由於我使用了多個這些小部件,它會更新每個小部件中的輸入值和圖像預覽。

如何設置輸入值並僅在我正在編輯的小部件中更新圖像預覽?我究竟做錯了什麼?

+1

請更新您的代碼中刪除**到一些小提琴**或jsbin,codepen,...我們有許多其他網站比所謂的pastebin更好。看起來pastebin限制了某些國家或地區的訪問權限,我無法訪問該網站。 –

+0

@king對不起,這裏是一個jsfiddle與JavaScript:http://jsfiddle.net/etzolin/DjADM/ – Etzolin

回答

2

內的媒體幀this事件處理程序是不點擊的元素

var media_frame; 

jQuery('.media-control a').live('click', function (event) { 

    var self = this; 

    event.preventDefault(); 

    if (media_frame) { 
     media_frame.open(); 
     return; 
    } 

    media_frame = wp.media.frames.media_frame = wp.media({ 
     title: jQuery(self).parent().data('title'), 
     button: { 
      text: jQuery(self).parent().data('update-text'), 
     }, 
     multiple: false 
    }); 

    media_frame.on('select', function() { 
     attachment = media_frame.state().get('selection').first().toJSON(); 

     jQuery(self).parent().find('.image-url').val(attachment.url); // set .image-url value 
     jQuery(self).parent().find('.image-preview').attr('src', attachment.url); // update .image-preview 
     //  ^^ this is not the element from the click handler but the media frame 
    }); 

    media_frame.open(); 
}); 

,你應該使用on()live()已被棄用,從jQuery的

+0

這完美的作品!我一直在拉我的頭髮,試圖整天找到答案。謝謝! – Etzolin

相關問題