2015-07-23 2 views
-1

Я написал этот простой кусок кода, и он работает!Мой цикл while не работает?

$(function() { 
    $('form').each(function() { 
     var form = $(this); 
     form.find('[class^="custAction_"]').prop('disabled', true).trigger("chosen:updated"); 
     form.find('[class^="custAction_4b"]').button('disable'); 
     form.find('.custSwitch_1').change(function() { 
      if (form.find('.custSwitch_1:checked').length) { 
       form.find('.custAction_1').prop('disabled', false).trigger("chosen:updated").trigger("change"); 
      } else { 
       form.find('.custAction_1').prop({'disabled': true, 'selectedIndex': 0}).trigger("chosen:updated").trigger("change"); 
      } 
     }); 
     form.find('.custSwitch_2').change(function() { 
      if (form.find('.custSwitch_2:checked').length) { 
       form.find('.custAction_2').prop('disabled', false).trigger("chosen:updated").trigger("change"); 
      } else { 
       form.find('.custAction_2').prop({'disabled': true, 'selectedIndex': 0}).trigger("chosen:updated").trigger("change"); 
      } 
     }); 
     form.find('.custSwitch_3').change(function() { 
      if (form.find('.custSwitch_3:checked').length) { 
       form.find('.custAction_3').prop('disabled', false).trigger("chosen:updated").trigger("change"); 
      } else { 
       form.find('.custAction_3').prop({'disabled': true, 'selectedIndex': 0}).trigger("chosen:updated").trigger("change"); 
      } 
     }); 
     form.find('.custSwitch_4').change(function() { 
      if (form.find('.custSwitch_4:checked').length) { 
       form.find('.custAction_4').prop('disabled', false).trigger("chosen:updated").trigger("change"); 
       form.find('.custAction_4b').button("enable"); 
      } else { 
       form.find('.custAction_4').prop({'disabled': true, 'selectedIndex': 0}).trigger("chosen:updated").trigger("change"); 
       form.find('.custAction_4b').prop("checked", false).button("refresh").button("disable", "disable"); 

      } 
     }); 
    }); 
}); 

Зная, что это повторяющееся, я думал, что «в то время как» цикл будет работать здесь, так что пытался это .....

 $(function() { 
     $('form').each(function() { 
      var form = $(this); 
      var switchClass = $('form[class^="custSwitch_"]').length; 
      form.find('[class^="custAction_"]').prop('disabled', true).trigger("chosen:updated"); 
      form.find('[class^="custAction_4b"]').button('disable'); 
      var countSw = 1; 
      while (countSw < switchClass) { 
       form.find('.custSwitch_'+countSw).change(function() { 
        if (form.find('.custSwitch_' + countSw + ':checked').length) { 
         form.find('.custAction_' + countSw).prop('disabled', false).trigger("chosen:updated").trigger("change"); 
        } else { 
         form.find('.custAction_' + countSw).prop({'disabled': true, 'selectedIndex': 0}).trigger("chosen:updated").trigger("change"); 
        } 
       }); countSw++ 
      } 
      form.find('.custSwitch_4').change(function() { 
       if (form.find('.custSwitch_4:checked').length) { 
        form.find('.custAction_4').prop('disabled', false).trigger("chosen:updated").trigger("change"); 
        form.find('.custAction_4b').button("enable"); 
       } else { 
        form.find('.custAction_4').prop({'disabled': true, 'selectedIndex': 0}).trigger("chosen:updated").trigger("change"); 
        form.find('.custAction_4b').prop("checked", false).button("refresh").button("disable", "disable"); 

       } 
      }); 
     }); 
    }); 

Но, увы это не так! :-) Я знаю, что мне что-то не хватает, возможно, что-то простое. .custSwitch_1, 2 и 3 классы больше не активируют и не отключают классы custAction_1, 2 и 3!

Si.

ответ

0

Проблема с кодом является то, что переменная countSw всегда 3, потому что, когда код внутри change слушателя выполняется, значение переменной является 3.

while (countSw < switchClass) { 
    form.find('.custSwitch_'+countSw).change(function() { 
    doSomething(countSw); 
    }); countSw++ 
} 

function doSomething(countSw) { 
    if (form.find('.custSwitch_' + countSw + ':checked').length) { 
    form.find('.custAction_' + countSw).prop('disabled', false).trigger("chosen:updated").trigger("change"); 
    } else { 
    form.find('.custAction_' + countSw).prop({'disabled': true, 'selectedIndex': 0}).trigger("chosen:updated").trigger("change"); 
    }      
} 

Обратите внимание, что ваш countSw это передается как параметр теперь.

+0

Очевидный вопрос сейчас ... Как мне изменить это? :-) Как вы, наверное, можете сказать, я не профессионал! :-) – Simon

+0

Вы можете переключить свое первое с моим, а затем написать функцию, которую я написал вне вашей основной функции (ваш цикл для форм). Он должен работать. – Mindastic

+0

Благодарим вас за помощь, я знаю, что помогать newbs может быть утомительным для ваших гениев Java. :-) – Simon

Смежные вопросы