2015-08-12 2 views
0

У меня есть серия кнопок, которые были клонированы. Я хотел сделать простую вещь, показывая especific div, если выбранный радиоприемник выбран и скрывается, если нет. Вот функция JQuery:jQuery .show() и .hide() для клонированных переключателей

$clone.find('[id^="mov"]').each(function(){ 
    $(this).click(function(){ 
      $clone.find('[id^="l"]').each(function(){ 
      if ($(this).is(":checked")){ 
       $clone.find('[id^="linear"]').each(function(){ 
       $(this).show(); 
       }); 
      } 
      }); 
      $clone.find('[id^="c"]').each(function(){ 
      if ($(this).is(":checked")){ 
       $clone.find('[id^="circular"]').each(function(){ 
       $(this).show(); 
       }); 
      } 
      }); 
      $clone.find('[id^="r"]').each(function(){ 
      if ($(this).is(":checked")){ 
       $clone.find('[id^="rotacional"]').each(function(){ 
       $(this).show(); 
       }); 
      } 
      }); 
      $clone.find('[id^="m"]').each(function(){ 
      if ($(this).is(":checked")){ 
       $clone.find('[id^="mudanca_config_mao"]').each(function(){ 
       $(this).show(); 
       }); 
      } 
      }); 
    }); 
}); 

мне удалось показать дивы я хочу, но я не могу показаться, чтобы скрыть их. Когда я делаю то же самое для другого, он не будет работать и перестанет показывать div.

if ($(this).is(":checked")){ 
    $clone.find('[id^="linear"]').each(function(){ 
    $(this).show(); 
    }); 
} 
else { 
    $clone.find('[id^="linear"]').each(function(){ 
    $(this).hide(); 
    }); 
} 

Кроме того, я знаю, что эта функция является своего рода повторяющиеся и грязно, так что если кто-то лучше и чистый способ сделать это, я открыт для предложений. Я новичок в jQuery и все еще изучаю :) Большое спасибо!

+2

Показать соответствующие html. Непонятно, что только что из сценария – charlietfl

+0

Эй, Доминик - JSFiddle поможет, так как это немного сложно читать. – IfTrue

+0

Вам не нужно использовать 'each()' столько. Такие методы, как 'click',' show' и 'hide', отлично работают с коллекциями jQuery. –

ответ

1

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

$clone.find('[id^="mov"]').on('click', function(){ 
    $clone.find('[id^="linear"]').toggle(
     $clone.find('[id^="l"]').is(':checked')); 
    $clone.find('[id^="circular"]').toggle(
     $clone.find('[id^="c"]').is(':checked')); 
    $clone.find('[id^="rotacional"]').toggle(
     $clone.find('[id^="r"]').is(':checked')); 
    $clone.find('[id^="mudanca_config_mao"]').toggle(
     $clone.find('[id^="m"]').is(':checked')); 
}); 
+0

Спасибо! Это было исключительно то, что я хотел сделать, и это хороший способ очистить код! Полезно знать, что мне не нужно использовать тысячи, если .each() :) –