5

コンテクスト

私はこのWordPressの質問に対する答えを作成しようとしています。

メディアアップロードシックボックスウィンドウで動的チェックボックスを生成しています。また、ユーザーがその値をコピーして貼り付けることができるテキストフィールドにデータを入力するのに役立つ必要があります。

テキストフィールドの最終出力は、このショートコードのinclude属性です[gallery include="23,39,45"]

主に、この最後の部分を作成するための支援が必要です:チェックボックス->テキストフィールドの入力/入力解除...


レイアウト

  1. 動的チェックボックス

  2. テキストフィールドの挿入ポイント(<tr>コンソールに最後に表示された後)

  3. 入力するテキストフィールドは、次のようにする必要があります=" +CheckBoxID1コンマCheckBoxID2コンマ など+ "

    ここに画像の説明を入力してください


実際のコード

<?php
add_action( 'admin_head-media-upload-popup', 'wpse_53803_script_enqueuer' );

function wpse_53803_script_enqueuer() {
    if( $_GET['tab'] == 'gallery' ) 
    {
        ?>
            <style>#media-upload th.order-head {width: 5%} #media-upload th.actions-head {width: 10%}</style>
            <script type="text/javascript">
            jQuery(document).ready( function($) {
    
                /* Iterate through the media items */
                $('.filename.new').each(function(i,e){
                    var id = $(this).next('.slidetoggle').find('thead').attr('id').replace(/media-head-/, '');
                    var filename = $('<label>Add to gallery list <input type="checkbox" name="gal-item-'+id+'" id="gal-item-'+id+'" value=""  /></label>').insertBefore($(this));
                    filename.css('float','right').css('margin-right','40px');

                    filename.id = id; // PROBLEM: not sure how to do this in Javascript
                    
                    // BUG: the alert is being fired twice
                    filename.click(function() {
                        alert('Handler for img id = '+filename.id+' called.');
                    });
                });                 
            });
            </script><?php
    }
}

不足している部品

  • 入力する動的テキストフィールドを作成します。
  • コメントで気づいた問題とバグを解決します。
  • テキストfilename.click(function()フィールド内に目的の文字列をビルドします。
4

1 に答える 1

1

これに似たものを使用してこれを行うことができます

 $(document).on('change','input[type="checkbox"][name^="gal-item"]',function(){
    var checkedIds = $('input[type="checkbox"][name^="gal-item"]:checked')
                       .map(function(){
       return parseInt($(this).prop('name').replace(/gal-item-/,''));
    }).get();

    $('#shortcode').val('include="'+checkedIds.join(',')+'"');

});

add media マークアップを調べて、見つけなければならdocumentないものと置き換えることができます。closer static containerそして、入力フィールドを追加したい要素を見つけたら、次のように追加します

$('<span>[gallery</span><input type="text" id="shortcode" /><span>]</span>')
 .appendTo(TARGETIDORCLASS);

ワーキングデモ

これに基づいて、書き直されたコードは次のようになります

jQuery(document).ready( function($) {
     //add input field
     $('<span>[gallery</span><input type="text" id="shortcode" /><span>]</span>')
 .appendTo(TARGETIDORCLASS);
    //bind checkbox change handler


     $(document).on('change','input[type="checkbox"][name^="gal-item"]',function(){
         var checkedIds = $('input[type="checkbox"][name^="gal-item"]:checked').map(function(){
       return parseInt($(this).prop('name').replace(/gal-item-/,''));

    }).get();

    $('#shortcode').val('include="'+checkedIds.join(',')+'"');

    });


    /* Iterate through the media items */
    $('.filename.new').each(function(i,e){
        var id = $(this).next('.slidetoggle')
                        .find('thead')
                        .attr('id')
                        .replace(/media-head-/, '');
       var filename = $('<label>Add to gallery list <input type="checkbox" name="gal-item-'+id+'" id="gal-item-'+id+'" value=""  /></label>')
              .insertBefore($(this));
       filename.css('float','right').css('margin-right','40px');

                });                 
            });

これはうまくいくはずです。私は急いでいて、あまりテストできませんでした。チェックして、エラーが見つかった場合はお知らせください。それらを修正したいと思います。

于 2012-06-06T03:37:52.490 に答える