jQuery: показать / скрыть элементы на основе выбранного варианта из выпадающего списка - PullRequest
2 голосов
/ 30 июня 2011

ОБНОВЛЕНИЕ: На оригинальный вопрос был дан ответ. Однако код раскрыт для всех. Итак, я изменил свой вопрос ниже:

Итак, у меня есть следующий динамически генерируемый HTML через php

<div class="image-link link-posttypes mainSelector1">
    <select id="wp_accordion_images[20110630022615][post_type]" name="wp_accordion_images[20110630022615][post_type]">
        <option value="">default</option>
        <option value="post" class="post-type">Post</option><option value="page" class="post-type">Page</option><option value="dp_menu_items" class="post-type">Menu Items</option>
        <option value="wps_employees" class="post-type">Employees</option><option value="custom-link">Custom Link</option>
    </select>
</div>

<div class="image-link link-pages1">
    <select id="wp_accordion_images[20110630022615][page_id]" name="wp_accordion_images[20110630022615][page_id]">
        <option value="50" class="level-0">About</option>
        <option value="65" class="level-0">Contact</option>
        <option value="2" class="level-0">Sample Page</option>
        <option value="60" class="level-0">Staff</option>
    </select>
</div>

<div class="image-link link-posts1">
    <select onchange="javascript:dropdown_post_js(this)" id="wp_accordion_images[20110630022615][post_id]" name="wp_accordion_images[20110630022615][post_id]">
        <option value="http://localhost/tomatopie/?p=1" class="level-0">Hello world!</option>
    </select>
</div>

<div class="image-link link-custom1">
    <input type="text" size="25" value="" name="wp_accordion_images[20110630022615][image_links_to]">
</div>

*** ТОГДА ЭТО ПОВТОРЯЕТ четыре раза: где # 1 переходит в 2..3 ... 4 (максимум до 4 в это время).

У меня есть возможность помечать div .classes, выбирать #ids и option-классы. Однако то, что я хочу сделать, основано на опции, выбранной из div .link-posttypes, я хочу показать .link-pages (если выбрана страница) или .link-posts (если выбрана запись) и. link-custom для всех остальных (кроме стандартных).

Таким образом, как написано на экране, должен быть только начальный div, и как только пользователь выбирает элемент, появляется соответствующий div.

Я никогда ничего не разрабатывал в jQuery или javascript. Это мое первое путешествие. Любая помощь будет принята с благодарностью!

*** Также, это будет загружено через внешний файл js.

Ответы [ 4 ]

3 голосов
/ 30 июня 2011

Вот окончательный ответ, который сработал:

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

$(".link-posttypes select").change(function(){
   var selectedVal = $(":selected",this).val();

   if(selectedVal=="post"){
        $(this).parent().nextAll(".link-pages").hide();
        $(this).parent().nextAll(".link-posts").slideDown('slow');
        $(this).parent().nextAll(".link-custom").hide();
   }else if(selectedVal=="page"){
        $(this).parent().nextAll(".link-pages").slideDown('slow');
        $(this).parent().nextAll(".link-posts").hide();
        $(this).parent().nextAll(".link-custom").hide();
   }else if(selectedVal!=""){
        $(this).parent().nextAll(".link-pages").hide();
        $(this).parent().nextAll(".link-posts").hide();
        $(this).parent().next().nextAll(".link-custom").slideDown('slow');
   }else{
        $(this).parent().nextAll(".link-pages").hide();
        $(this).parent().nextAll(".link-posts").hide();
        $(this).parent().nextAll(".link-custom").hide();
   }
});
});

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

$(".image-content select").change(function(){
   var selectedVal = $(":selected",this).val();

   if(selectedVal=="content-limit"){
        $(this).parent().next().nextAll(".content-limit-chars").slideDown('slow');
        $(this).parent().nextAll(".content-custom").hide();
   }else if(selectedVal=="custom-content"){
        $(this).parent().nextAll(".content-limit-chars").hide();
        $(this).parent().next().nextAll(".content-custom").slideDown('slow');
   }
});
});

Спасибо за вашу помощь!

2 голосов
/ 30 июня 2011

Предполагая, что вы выводите правильные идентификаторы, вы можете сделать что-то вроде этого (обратите внимание, я заменил идентификатор):

  $(window).load(function(){
    // hide all the divs except the posttypes
    $('.image-link').not('.link-posttypes').hide();
    $('#wp_accordion_images_20110630022615_post_type').change(function() {
        var divSelector = '.link-' + $(this).val();
        $('.image-link').not('.link-posttypes').hide();
        $(divSelector).show();

    });
  });

Также рассмотрите возможность изменения options следующим образом:

<option value="posts" class="post-type">Post</option>
<option value="pages" class="post-type">Page</option>
<option value="menu_items" class="post-type">Menu Items</option>        
<option value="wps_employees" class="post-type">Employees</option>
<option value="custom">Custom Link</option>   

Вот jsfiddle для этого: http://jsfiddle.net/JrPeR/

0 голосов
/ 30 июня 2011

http://jsfiddle.net/JrPeR/3/

добавил условие, поэтому, если это не две переменные, по умолчанию используется значение custom.

0 голосов
/ 30 июня 2011

Вот мой понятный скрипт jquery

jQuery(document).ready(function($) {
    $(".link-pages").hide();
    $(".link-posts").hide();
    $(".link-custom").hide();
    $(".link-posttypes select").change(function(){
       var selectedVal = $(":selected",this).val();
       if(selectedVal=="post"){
            $(".link-pages").hide();
            $(".link-posts").show();
            $(".link-custom").hide();
       }else if(selectedVal=="page"){
            $(".link-pages").show();
            $(".link-posts").hide();
            $(".link-custom").hide();
       }else if(selectedVal!=""){
            $(".link-pages").hide();
            $(".link-posts").hide();
            $(".link-custom").show();
       }else{
            $(".link-pages").hide();
            $(".link-posts").hide();
            $(".link-custom").hide();
       }
    });
});

Демо здесь . Уделите мне пару минут, чтобы вам было легче понять. Веселитесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...