发送至编辑者和jQuery.attr()与多个自定义上传图像元框冲突

时间:2015-06-11 作者:Edmund Heaphy

我已经将两个自定义元框添加到自定义帖子类型中。一个是上载要存储在“headshot”的自定义字段值中的图像,另一个是上载要存储在“column headshot”的自定义字段值中的图像。这是一个新闻网站。

UI for Headshots

两者都将在“添加媒体”窗格中选择的图像的URL发送到隐藏字段,然后通过正常过程将其发布到自定义字段。但是,我还希望在保存或发布帖子之前预览所选的图像,因此我让jQuery更新图像的src属性,该属性位于div中,一旦在“添加媒体”窗格中选择了图像,就会显示该div。问题是,在第一个“正常头像”框中,当选择图像时,它会更新“列头像”框中图像的src属性,而不是正确的“正常头像”框。

我很确定这是因为window.send_to_editor 实例。最初,我遇到了一个问题,即更新“正常标题”也会将其URL发送到错误的隐藏字段(“列标题”框中的字段),但我通过定义要更新的字段来解决了这个问题:uploadID = jQuery(this).prev(\'input\');

这就解决了问题。我也试图定义要这样更改的源属性的图像,但这并没有解决问题(事实上,这意味着没有更新源属性):changeID = jQuery(this).prev(\'img\');

existing questions 其中询问如何处理window.send_to_editor, 但他们没有帮助我。要么他们的解决方案在这里不起作用,要么我没有正确地实现它。

如何调整此代码以使send_to_editor 工件更新了正确的图像源属性,或者这样我可以在选择两幅图像后显示它们的预览?

下面是第一个“正常Headshot”框中使用的jQuery:

jQuery(document).ready( function( $ ) {

$(\'#upload_image_button\').click(function() {
    uploadID = jQuery(this).prev(\'input\');
    formfield = $(\'#upload_image\').attr(\'name\');
    tb_show( \'\', \'media-upload.php?type=image&TB_iframe=true\' );

    return false;
});


window.send_to_editor = function(html){


    headshotimgurl = $(\'img\',html).attr(\'src\');
    uploadID.val(headshotimgurl);

    jQuery("#imageurladder").attr("src", headshotimgurl);

    tb_remove();

    $( "#imageafterdisplay" ).hide();

    $( "#imagebeforesave" ).show();

    $("#upload_image_button_clear").removeAttr("disabled");

}


  $("#upload_image_button_clear").click(function() {



 if (!$("#upload_image_button_clear").is(":disabled")) {

  $( "#imageafterdisplay" ).hide();

    $( "#imagebeforesave" ).hide();

    $(\'#upload_image\').val(\'\');  

    $("#upload_image_button_clear").attr("disabled","disabled");

  }


 });


 });
下面是第二个“列标题”框中使用的jQuery:

jQuery(document).ready( function( $ ) {

$(\'#upload_column_button\').click(function() {


    uploadID = jQuery(this).prev(\'input\');
    formfield = $(\'#upload_column\').attr(\'name\');
    tb_show( \'\', \'media-upload.php?type=image&TB_iframe=true\' );

    return false;


});


window.send_to_editor = function(html){



    columnimgurl = $(\'img\',html).attr(\'src\');
    uploadID.val(columnimgurl);


    jQuery("#columnurladder").attr("src", columnimgurl);

    tb_remove();

    $( "#imageafterdisplay_column" ).hide();

    $( "#imagebeforesave_column" ).show();

    $("#upload_column_button_clear").removeAttr("disabled");


}


 $("#upload_column_button_clear").click(function() {



if (!$("#upload_column_button_clear").is(":disabled")) {

  $( "#imageafterdisplay_column" ).hide();

    $( "#imagebeforesave_column" ).hide();

    $(\'#upload_column\').val(\'\');


    $("#upload_column_button_clear").attr("disabled","disabled");



   }


   });



   });

1 个回复
最合适的回答,由SO网友:rzepak 整理而成

我最近做了类似的事情,但使用了wp。介质而非ThickBoxhttps://codex.wordpress.org/Javascript_Reference/wp.media 使用与Codex相同的代码。使其能够处理多个输入的唯一方法是将frame变量从全局范围移动到click函数,这样每次单击时“frame”都是新的。

结束