代码之家  ›  专栏  ›  技术社区  ›  vinutha

如何计算ruby on rails中嵌套字段的百分比

  •  0
  • vinutha  · 技术社区  · 7 年前

    在controller中加载页面时,我已设置了默认的3个嵌套属性字段

    def new
    @candidate = Candidate.new
    #@candidate.educations.build
    3.times do
      education = @candidate.educations.build
    end
    

    终止 我正在使用jquery计算候选项中嵌套字段的百分比。我有咖啡档案

    $('#max_marks, #marks_obtained').keyup ->
    max_marks = parseFloat($('#max_marks').val()) or 0
    marks_obtained = parseFloat($('#marks_obtained').val()) or 0
    $('#percentage').val marks_obtained * 100 / max_marks
    return
    

    在\u education\u字段中。html。erb我有我的字段

     <div class="form-group">
          <%= f.label :max_marks %><br>
          <%= f.text_field :max_marks, id: 'max_marks' %>
        </div>
        <div class="form-group">
          <%= f.label :marks_obtained %><br>
          <%= f.text_field :marks_obtained, id: 'marks_obtained'%>
        </div>
        <div class="form-group">
          <%= f.label :percentage %><br>
          <%= f.text_field :percentage, id: 'percentage' %>
        </div>
    

    现在我可以计算第一个字段的百分比,但第二个和第三个字段我无法应用jquery,因为3个字段的id相同。我如何计算其他2个字段的百分比

    1 回复  |  直到 7 年前
        1
  •  0
  •   Prince Bansal    7 年前

    child_index rails在html中使用时在嵌套关联中提供的内容。雇员再培训局。

    下面的代码可能会解决您的问题。

    <div class="education_<%= f.options[:child_index] %>">
      <div class="form-group">
          <%= f.label :max_marks %><br>
          <%= f.text_field :max_marks, class: 'max_marks', data: {index: f.options[:child_index]} %>
        </div>
        <div class="form-group">
          <%= f.label :marks_obtained %><br>
          <%= f.text_field :marks_obtained, class: 'marks_obtained', data: {index: f.options[:child_index]}%>
        </div>
        <div class="form-group">
          <%= f.label :percentage %><br>
          <%= f.text_field :percentage, class: 'percentage' %>
        </div>
    </div>
    
    
    
    $('.max_marks, .marks_obtained').focusout(function(event){
          var target = $(event.target), parent = target.parents().find('.education_' + target.attr('data-index'));
          if (parseInt(parent.find('.marks_obtained').val()) > parseInt(parent.find('.max_marks').val())){
             alert('Marks Obtained cannot be greater then Maximun Marks');
             parent.find('.marks_obtained').val('');
          } else {
            var max_marks = parseFloat(parent.find('.max_marks').val())
            var marks_obtained = parseFloat(parent.find('.marks_obtained').val())
    
    max_marks = max_marks === NaN ? 0 : max_marks
    
    marks_obtained = marks_obtained === NaN ? 0 : marks_obtained
            parent.find('.percentage').val(marks_obtained * 100 / max_marks)
          }
        });