0

私は Jquery を使用するのが初めてで、実際に Jquery を使用した最初のプロジェクトであり、少し問題があります。ここに私の HTML があります:

 <tr><th scope="row"><?php echo $box_name[$i] ?></th>
            <td>

            <div class="parent_div">
                <div><strong>Select an image</strong></div>
                <p><?php $this->_addDropDown( $box[$i].'_option', array( 'default' => 'Default', 'custom_image' => 'Custom Image') ); ?></p>


                <div class="upload_container">
                    <div>Upload a new image: <a href="" id="upload_button" class="thickbox upload_file">Upload File</a></div>
                    <?php $this->_addHidden( $box[$i] ); ?>
                    <?php $this->_addDefaultHidden( 'default_'.$box[$i] ); ?>


                    <?php $box_url = ( ! empty( $wp_theme_options[$box[$i]] ) ) ? $wp_theme_options[$box[$i]] : $wp_theme_options['default_'.$box[$i]]; ?>
                    <?php if ( ! empty( $box_url ) ) : ?>
                        <?php $box_path = iThemesFileUtility::get_file_from_url( $box_url ); ?>
                        <?php if ( ! is_wp_error( $box_path ) ) : ?>
                            <?php $box_thumb = iThemesFileUtility::resize_image( $box_path, $this->_options['box_preview_width'], $this->_options['box_preview_height'], true ); ?>
                            <?php if ( ! is_wp_error( $box_thumb ) ) : ?>
                                <a href="<?php echo $box_url; ?>" target="_blank"><img id="image_thumbnail" src="<?php echo $box_thumb['url']; ?>" /></a>
                <?php endif; ?>         
                </div>
            </div>

            </td>

    </tr>


<?php endfor; ?>

私が現在やろうとしていることは、次のようなものです。

function refreshImageBoxOptions(id) {
 if($("#this_item" + id).attr("value") == 'default') {
   $(this).parents(".parent_div").find(".child_div").slideUp();
 }
 else if($("#this_item" + id).attr("value") == 'something_else') {
   $(this).parents(".parent_div").find(".child_div").slideDown();
 }
}

コードの一部を切り取ると、 $(".parent_div").slideUp(); を取得できます。および $(".child_div").slideUp(); うまく機能するために。$(this).parents(".parent_div").find(".child_div").slideUp(); を使用しようとした場合のみです。私に問題があること。

私はこのサイトや他の多くのサイトを調べてきましたが、ここで何か間違った設定をしていないかどうかを確認するために新鮮な目が必要だと思います.

これは、関数が呼び出されている場所です。

$(document).ready(
    function(){

        $(".child_div").hide();

            $("#left_option").change(
            function(e) {
                refreshImageBoxOptions("box_left");
                ;

            }
        );
        $("#middle_option").change(
            function(e) {
                refreshImageBoxOptions("box_middle");

            }
        );
        $("#right_option").change(
            function(e) {
                refreshImageBoxOptions("box_right");

            }
        );

}
);
}) (jQuery);
4

3 に答える 3

1

あなたは間違った文脈を持っているようです。関数内の「this」は、イベントをトリガーした要素を参照しますが、それが何であるかはわかりません。

この関数の呼び出しのコンテキストを教えてください。たとえば、「この」コンテキストとは何ですか? これらの関数を実際に呼び出す js を貼り付けることができれば、それが役立ちます。

その時の「これ」は div.parent_div の子でよろしいですか?

于 2009-08-05T14:32:04.333 に答える
0

おそらくこれを変更します:

$(this).parents(".parent_div").find(".child_div")

これに:

$(this).parents(".parent_div").children(".child_div")

this幸運の起源がよくわからないので、ここで推測します。

于 2009-08-05T14:31:52.523 に答える
0

よし、わかった。関数が呼び出されたとき、これを関数に渡していなかったので、「これ」が何であるかわかりませんでした。

$("#option").change(
  function(e) {
     refreshImageBoxOptions(this,"box_left");
   }
 );



function refreshImageBoxOptions(current,id) {
 if($("#" + id + "_option").attr("value") == 'default') {
  $(current).parents(".parent").find(".child").slideUp();
 else if($("#" + id + "_option").attr("value") == 'custom_image') {
  $(current).parents(".parent").find(".child").slideDown();
 }
}

素晴らしいアイデアをありがとう!

于 2009-08-05T20:00:04.290 に答える