результат в jQuery форма карточки для определения положительного или отрицательного


Я сделал простую форму оценочного листа, который использует jQuery, чтобы автоматически рассчитать результат представлений в зависимости от значения поля. Некоторые поля являются "критическими", что означает, если они терпят неудачу, они автоматически не получится.

Вы можете видеть в jsFiddle пример , чтобы лучше понять. Я пытался сделать код как можно более эффективной, но хотела бы услышать мнения народов о том, что улучшения могут быть сделаны.

//disable individual radios by#
$("#edit-submitted-calc-verification-completed-idv-correctly-1, #edit-submitted-calc-summary--action-2-notes-1").attr('disabled',true);

$("#webform-component-calc select, #webform-component-calc :radio").change(function(){

   var $score = 0; 
   var $fails = 0;
   var $critFails = 0;


    $('select option:selected, :radio:checked').each(function(){ 

        var $thisVal = $(this).val();
        var $split = $thisVal.split('_');
        var $string = $split[0];
        var $points = parseInt($split[1],10);


      $(this).parents('tr').find('.webform-grid-option').removeClass('pass fail');

      if ($string == 'fail' || $string == 'critical') {

          $(this).parents('.webform-grid-option').addClass('fail');

          if($string == 'fail') {
              $fails += 1;
          }
          if($string == 'critical') {
              $critFails += 1;   
          }
      }

      else {

          $(this).parents('.webform-grid-option').addClass('pass');
           if($string == 'pass' || $string == 'na') {
              $score += $points;  
           }           
        }
    });

    var $finalScore = $score;
    if($critFails > 0){
         var $finalScore = 0;
       }


    var $summary = 'Final Call score: '+$finalScore+'% with '+$fails+' Fails / '+$critFails+' Critical Fails';


    //alert($summary);
    $('#edit-submitted-calc-number-of-fails').val($fails); 
    $('#edit-submitted-calc-call-score').val($score); 
    $('#edit-submitted-calc-critical-failures-number-of-critial-fails').val($critFails); 
    $('#edit-submitted-calc-critical-failures-final-score').val($finalScore); 
    $('#edit-submitted-calc-summary').val($summary); 

});


997
1
задан 22 декабря 2011 в 12:12 Источник Поделиться
Комментарии
1 ответ

Лично я бы ничего не меняла сам расчет. Все это вполне разумно так оно и есть.

Есть всего две вещи могут быть оптимизированы в отношении с jQuery:


  • Вы должны использовать .гардероб() вместо .родители() , поскольку вам нужен только первый (ближайший) соответствие родителей и не все предки.

  • Также вы можете оптимизировать назначить обработчик для радио-кнопки с помощью .делегат() (или .на с jQuery 1.7) вместо.

Есть также несколько вещей, которые лично я бы сделал по-другому:


  • В HTML я бы че элементами на вопрос клетки и тд только на параметры, что позволит вам избавиться от занятий - формы-сетки-вопрос и форму-решетка-вариант.

  • Я не большой поклонник использования $ в имени переменной, особенно если они не указывают на объект jQuery.

  • Мне не нравится ввод элементов для вывода. Я бы использовал "нормальный" элемент, например, Спан или див (или если HTML5-это новый параметр выходного элемента).

1
ответ дан 22 декабря 2011 в 03:12 Источник Поделиться