2011-06-07 61 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

相关问题