2011-06-07 99 views
2

我有一個克隆的div包含輸入元素,所有這些都被禁用。我正在嘗試使用以下JQuery代碼來刪除每個div的子項的disabled屬性。爲什麼我不能刪除所有孩子的屬性?

clonedElement.children().removeAttr('disabled'); 

我沒有大量的JQuery經驗,所以我可能誤解了這種工作方式。我應該如何去除克隆節點的所有孩子的「禁用」屬性?

如果有幫助,clonedElement與JQuery的.clone()方法創建。

HTML我使用的自我測試---

 <div id="original_item" class="hidden"> 
      <div class="row_submit"> 
       <div class="med_field"> 
        <p>Product:</p> 
        <select name="product[]"> 
         <option></option> 
        </select> 
       </div> 
       <div class="small_field"> 
        <p>Type:</p> 
        <select name="type[]"> 
         <option></option> 
        </select> 
       </div> 
       <div class="small_field"> 
        <p>Price:</p> 
        <input type="text" name="price[]" value="test" disabled="disabled" /> 
       </div> 
       <div class="small_field"> 
        <p>Quantity:</p> 
        <input type="text" name="quantity[]" /> 
       </div> 
       <img onclick="removeItem(this);" title="Remove Item" style="margin: 18px 0 0 12px;" src="icons/cancel.gif" /> 
      </div> 
      <input type="hidden" name="warehouse_data[]" /> 
     </div> 
+1

你能顯示HTML? – lonesomeday 2011-06-07 18:48:39

回答

8

children只查找直接的孩子,如果克隆的元素不是med_field/small-field之一,那麼它將無法工作。

您可以使用find()而不是搜索超越眼前的子元素。

//for jQuery < 1.6 
$("*", clonedElement).removeAttr("disabled"); 
//or 
clonedElement.find("*").removeAttr("disabled"); 

//for jQuery >= 1.6 
$("*", clonedElement).removeProp("disabled"); 
//or 
clonedElement.find("*").removeProp("disabled"); 
+0

完美。現在我想到了這件事,孩子們的事情顯然是有道理的。謝謝。 – dqhendricks 2011-06-07 19:06:10

+0

而不是使用「*」選擇器,我只是選擇你需要的元素:'clonedElement.find('input,select')'。儘管在這種情況下它沒有什麼不同,但效率更高,避免做你不想做的事情是一種很好的做法。 – 2011-06-07 19:27:56

+0

@Jamietre:如果OP使用這個去除被禁用的屬性,那麼是的...我們可以簡單地使用輸入/選擇選擇器 – Chandu 2011-06-07 19:33:51

0

jQuery的< 1.6當前的代碼應工作。

jQuery的1.6+做到這一點:clonedElement.children().removeProp('disabled');

見的原因這個問題.prop() vs .attr()爲什麼

+0

am 1.6+。試過這個。不起作用。 – dqhendricks 2011-06-07 18:53:14

+0

'.prop'和'.attr'都是「寫入多個,只能從第一個讀取」 – Alnitak 2011-06-07 18:54:46

0

只要clonedElement是一個jQuery元素,你可以這樣做:

clonedElement.children().each(function() { 
    $(this).removeAttr('disabled'); 
}); 
+0

這似乎不起作用。 – dqhendricks 2011-06-07 18:59:30

相關問題