Скрытие div на основе выбранной радиокнопки - PullRequest
3 голосов
/ 25 января 2012

У меня проблема с переключателями, показывающими один div и скрывающими остальные.У меня есть мой код, который я опубликую ниже (проверено и работает в jsfiddle, но не тогда, когда я помещаю его на мою страницу).

Чтобы дать вам представление о том, что мне нужно, я делаю страницу регистрации.Переключатели будут управлять элементом div, в котором помещена форма, поэтому флажок 1 будет выбран, элемент div 1 выбран, остальные скрыты и т. Д.

Вот мой jquery:

<script type="text/javascript">
$('#accountchoice').change(function() {
if ($('#personalfan').attr('checked')) {
    $('#personalfan1').show();
    $('#soloartist1').hide();
    $('#band1').hide();
    $('#venue1').hide();
    $('#business1').hide();
    $('#service1').hide();
} else if ($('#soloartist').attr('checked')) {
    $('#soloartist1').show();
    $('#personalfan1').hide();
    $('#band1').hide();
    $('#venue1').hide();
    $('#business1').hide();
    $('#service1').hide();
} else if ($('#band').attr('checked')) {
    $('#band1').show();
    $('#personalfan1').hide();
    $('#soloartist1').hide();
    $('#venue1').hide();
    $('#business1').hide();
    $('#service1').hide();
} else if ($('#venue').attr('checked')) {
    $('#venue1').show();
    $('#personalfan1').hide();
    $('#soloartist1').hide();
    $('#band1').hide();
    $('#business1').hide();
    $('#service1').hide();
} else if ($('#business').attr('checked')) {
    $('#business1').show();
    $('#personalfan1').hide();
    $('#soloartist1').hide();
    $('#band1').hide();
    $('#venue1').hide();
    $('#service1').hide();
} else if ($('#service').attr('checked')) {
    $('#service1').show();
    $('#personalfan1').hide();
    $('#soloartist1').hide();
    $('#band1').hide();
    $('#venue1').hide();
    $('#business1').hide();


 }
 });
 </script>

и вот HTML

 <body>
 <?php include_once "header_template.php"; ?>
   <div id="signupwrapper">
 <div id="signupinner">

       <h3 align="left"> GETSCENE REGISTRATION ! </h3>
       <hr />

    <div id="signup" style="border:thin; border-color:#666">
    <h4 align="left">Please Choose One of The Following Account Types</h4>
        <div id="accountswrapper">
  <form id="accountchoice" name="accountchoice" method="post" action="">

  <label for="radio">personal/fan</label>   
  <input type="radio" name="radio" id="personalfan" value="radio1" checked="checked" />

  <label for="radio2">Solo artist</label>   
  <input type="radio" name="radio" id="soloartist" value="radio2" />

  <label for="radio3">band</label>               
  <input type="radio" name="radio" id="band" value="radio3" />

  <label for="radio4">venue</label>   
  <input type="radio" name="radio" id="venue" value="radio4" />

  <label for="radio5">business</label>   
  <input type="radio" name="radio" id="business" value="radio5" />

  <label for="radio6">service</label>   
  <input type="radio" name="radio" id="service" value="radio6" />
  </form>  

  <hr />
  <div id="personalfan1">1</div>
  <div id="soloartist1">2</div>
  <div id="band1">3</div>
  <div id="venue1">4</div>
  <div id="business1">5</div>
  <div id="service1">6</div>
  </div>
   </div>
</div>
</div>
<?php include_once "footer_template.php"; ?>
</body>

Любая помощь здесь будет очень полезна, так как я часами бьюсь головой об этом.

Ответы [ 3 ]

4 голосов
/ 25 января 2012

Этот скрипт

<script type="text/javascript">
$('#accountchoice').change(function() {

Работает только в том случае, если он находится на конце вашего тега body.Если он в голове, он ничего не будет делать, так как dom не будет готов при запуске скрипта.

Самый простой способ исправить это - поместить этот код в обработчик document.ready:

$(function() {
    //this will run when the dom is ready
    $('#accountchoice').change(function() {
});

Вы сможете урезать этот код и сделать все за один снимок, посмотрев на радио, которое проверено

var allDivs = ['venue1', 'personalfan1', 'soloartist1', 'band1', 'business1', 'service1'];

var radio = $("input[type='radio']:checked");
if (radio.length === 0)
    return;
$('#' + allDivs.join(',#')).hide();
$("div#" + radio[0].id + "1").show();
1 голос
/ 25 января 2012

Вы можете реструктурировать свой HTML, чтобы сделать вашу жизнь НАМНОГО проще.

Вот пример:

<style type="text/css">
    #account_types > div { display: none; }
</style>
<div id="signupwrapper">
    <div id="signupinner">
        <h3 align="left"> GETSCENE REGISTRATION ! </h3>
        <hr />
        <div id="signup" style="border:thin; border-color:#666">
            <h4 align="left">Please Choose One of The Following Account Types</h4>
            <div id="accountswrapper">
                <form id="accountchoice" name="accountchoice" method="post" action="">
                    <label for="personalfan">personal/fan</label>   
                    <input type="radio" name="radio" id="personalfan" value="radio1" checked="checked" />

                    <label for="soloartist">Solo artist</label>   
                    <input type="radio" name="radio" id="soloartist" value="radio2" />

                    <label for="band">band</label>               
                    <input type="radio" name="radio" id="band" value="radio3" />

                    <label for="venue">venue</label>   
                    <input type="radio" name="radio" id="venue" value="radio4" />

                    <label for="business">business</label>   
                    <input type="radio" name="radio" id="business" value="radio5" />

                    <label for="service">service</label>   
                    <input type="radio" name="radio" id="service" value="radio6" />
                </form>  

                <hr />
                <div id="account_types">
                    <div class="personalfan">1</div>
                    <div class="soloartist">2</div>
                    <div class="band">3</div>
                    <div class="venue">4</div>
                    <div class="business">5</div>
                    <div class="service">6</div>
                </div>
            </div>
        </div>
    </div>
</div>
<script type="text/javascript">
    $(document).ready(function () {

        $('#accountchoice').change(function() {
            var divToShow = $(this).find('input:checked').attr('id');
            $('#account_types > div').each(function() {
                if($(this).hasClass(divToShow)) { $(this).show(); }
                else { $(this).hide();}
            });

        });

        $('#accountchoice').trigger('change');
    });
</script>

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

Во-вторых, теперь у них есть имена классов, которые совпадают с их ассоциированным идентификатором ввода. Это позволяет очень легко ссылаться на тот, который вы ищете, и в то же время позволяет легко прикоснуться к остальным. Так что теперь вы можете перебрать массив этих элементов, показать () Div, который идет вместе с выбранным радио, и скрыть () те, которые не являются. Все в несколько небольших шагов.

Это также значительно упрощает добавление новых частей в ваш код. В противном случае, если вы добавите новый раздел, вам нужно будет отредактировать каждый сделанный вами оператор if (), добавив новый раздел, чтобы убедиться, что он правильно отображается и скрывается.

Здесь вы можете увидеть некоторые возможности DOM. Гораздо более простой код, более простой в обслуживании, и вы можете использовать его позже.

Я тоже исправил ярлыки для вас.

0 голосов
/ 25 января 2012

Вот еще один пример, хотя он требует небольшого изменения HTML, чтобы сделать его аккуратным / простым в управлении.

HTML

// Added class "choice" to the radio inputs
<input type="radio" name="radio" id="venue" class="choice" value="radio4" />
<input type="radio" name="radio" id="business" class="choice" value="radio5" />
<input type="radio" name="radio" id="service" class="choice" value="radio6" />

<div class="account_types">
    <div class="dynamic" id="venue1">
        4</div>
    <div class="dynamic" id="business1">
        5</div>
    <div class="dynamic" id="service1">
        6</div>
</div>

SCRIPT

$('input.choice').click(function () {
    var eleToShow = this.id + "1";
    $('div', '.account_types').hide();
    $('#' + eleToShow).show();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...