2014-06-07 44 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

相关问题