обход классов с использованием Jquery - PullRequest
0 голосов
/ 05 августа 2009

Я новичок в работе с Jquery, на самом деле это мой первый настоящий проект, и у меня возникли небольшие проблемы. Вот мой HTML: Edit: хорошо, я уточнил код и добавил, где вызывается функция.

 <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);

Ответы [ 3 ]

1 голос
/ 05 августа 2009

Похоже, у вас неверный контекст. «This» внутри функции относится к элементу, который вызвал событие, но мы не можем сказать, что это.

Можете ли вы сообщить мне контекст вызовов этой функции. например, что такое контекст «это»? Если бы вы могли вставить js, который фактически вызывает эти функции, это помогло бы.

Вы уверены, что «this» в то время является потомком div.parent_div?

0 голосов
/ 06 августа 2009

хорошо, так что я понял это.Когда вызывалась моя функция, я не передавал это через функцию, поэтому он понятия не имел, что такое «это».

$("#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();
 }
}

Спасибо за все замечательные идеи!

0 голосов
/ 05 августа 2009

Возможно изменить это:

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

к этому:

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

Угадаю, поскольку я не уверен в происхождении this - удачи.

...