2015-09-30 29 views
0

所以我有一個頁面,點擊按鈕後,它打開一個嵌套的字段,我想在點擊時隱藏字段中的一個div,但到目前爲止我的功能不起作用。.insertBefore()不是一個函數javascript

我的JS文件

$('body').on('click', '#main-applicant-btn', function() { 

    event.stopPropagation(); 
    var prependData = $('.main-applicant').children().first().clone(); 
    prependData.find("div.checkbox").replaceWith($("div.checkbox.hide")); 
    var prependedData = $('.main-applicant').children().last(); 
    var list = document.getElementsByClassName("main-applicant"); 
    list.insertBefore(prependData, prependedData); 
    }) 

我applicant.html.erb文件

<div class="form-group"> 
     <%= f.link_to_add "", :applicant_commitments, :class => "glyphicon glyphicon-plus-sign pointer add", :id => "main-applicant-btn", :data => {:target => "#main-applicant-#{rand}"} %> 
     </label> 
    </div> 
    <span id="main-applicant-<%= rand %>" class="main-applicant"> 
      <%= f.simple_fields_for :applicant_commitments do |applicant_commitment| %> 
      <%= render "existing_commitment_fields", {:f => applicant_commitment, :instalment => true, :type => 'existing_commitment_applicant'} %> 
      <% end %> 
     </span> 

我嵌套場existing_commitment_fields.html.erb

<div class="form-group monthly-instalment-lender-checkbox"> 
     <div class="col-sm-3" id="checkbox-existing-fields"> 
      <div class="checkbox"> 
      <label> 
       <span>Joint Name</span> 
       <%= f.input_field :joint_name, as: :boolean, class: "joint-name-commitment" %> 
      </label> 
      </div> 
     </div> 
    </div> 

所以在點擊我想要的main-applicant-btn當它顯示nested_fields時,我將隱藏div.checkbox但到目前爲止當我嘗試這段代碼時,出現錯誤.insertBefore()不是函數。

任何人有任何線索如何追加或強制JavaScript運行代碼後,它已經加載?

回答

1

insertBefore是一種節點方法。方法返回HTMLCollection

你得通過這個的HTMLCollection迭代或挑裏面的元素,以實際接觸的節點,並使用他們的方法之一:

list[0].insertBefore(...,...)

此外,由@nnnnnn提到,「 insertBefore()方法並不期待jQuery對象作爲參數。「
因此,無論使用普通的JavaScript方法如document.querySelector('')或調用jQuery對象($(...)[0]

+1

另外,'的insertBefore()'方法並不期望的jQuery對象作爲參數的目標。 – nnnnnn

+0

@nnnnnn你是對的將編輯 – Kaiido