首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$(此).parent().find()不起作用

问$(此).parent().find()不起作用
EN

Stack Overflow用户
提问于 2014-06-08 03:39:31
回答 1查看 16.3K关注 0票数 3

我正在制作一个显示图片的Wordpress小工具,为了上传/更改这个图片,我使用了Wordpress媒体上传工具。

这是我正在使用的管理表单标记:

代码语言:javascript
复制
<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-control a“时,上传程序就会出现,我可以选择一张图片。但是当我选择了一个图像".image-preview“和".image-url”不会被更新。

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

除了下面这几行之外,所有的代码都正常工作:

代码语言:javascript
复制
jQuery(this).parent().find('.image-url').val(attachment.url);
jQuery(this).parent().find('.image-preview').attr('src', attachment.url);

当我像这样写它们时,输入值被设置,图像预览被更新:

代码语言:javascript
复制
jQuery('.media-control .image-url').val(attachment.url);
jQuery('.media-control .image-preview').attr('src', attachment.url);

但是,因为我使用了不止一个这样的小部件,所以它会更新每个小部件中的输入值和图像预览。

如何设置输入值并仅在正在编辑的小部件中更新图像预览?我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-08 03:45:24

在媒体帧this的事件处理程序中,不是单击的元素

代码语言:javascript
复制
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中删除

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24100905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档