2011-11-01 4 views
0

사용자가 값 쌍을 입력합니다. 마지막 세트를 복제하고 ID 번호를 다시 매겨야합니다. 아래 함수는 실행되지만 새 div는 표시되지 않습니다. 나는 잡초에서 어딘가에있어 ... 도와 줘서 고마워!clone() 작동하지 않음 (나를 위해)

$('#addparm').click(function (event) { 
     event.preventDefault(); 
     var maxSeq = $('#maxseq').attr("seq"); 
     var lastDiv = $('#pct[' + maxSeq + ']').parent(); 
     $('#maxseq').attr("seq", ++maxSeq); 
     var newDiv = $(lastDiv).clone(true); 
     $(lastDiv).after(newDiv); 
     $(newDiv).fadeIn('slow'); 
    }); 

여기에 HTML의 :

... 
    <div id="bkp[8]"> 
     <input seq="8" id="pct[8]" name="pct" type="text" value="0.28" /> 
     <input seq="8" id="amt[8]" name="amt" type="text" value="43.2" /> 
     <input seq="8" id="use[8]" name="use" type="hidden" value="yes" /> 
    </div> 

    <div id="bkp[9]"> 
     <input seq="9" id="pct[9]" name="pct" type="text" value="0.31" /> 
     <input seq="9" id="amt[9]" name="amt" type="text" value="41.4" /> 
     <input seq="9" id="use[9]" name="use" type="hidden" value="yes" /> 
    </div> 
<input type="hidden" id="maxseq" seq="9" /> 
<a id="addparm" href="javascript:void(0)">Add</a> 

답변

3

복제는 잘 작동하지만, 당신의 선택은 작동 할 아무것도 발견되지 않습니다.

HTML specs에 따르면 요소 ID에 대괄호를 사용할 수 없습니다. 또한 대괄호가있는 ID를 가진 요소를 찾는 셀렉터는 자신이 생각하는 것과 일치하지 않습니다.

선택기 :

#foo[5] 

는, ID foo[5]와 요소를 일치하지 않습니다 오히려 그것은 element with ID fooattribute named 5을 찾습니다.

즉, lastDiv은 빈 jQuery 컬렉션을 보유하고 있으므로 아무것도 복제되지 않고 아무것도 추가되지 않습니다.

부적절한 ID attr 값 (권장하지 않음)을 유지하면서 선택기에서 대괄호를 이스케이프하거나 ID 값을 수정하여 스펙을 충족시키고 코드를 새 ID 형식으로 조정하십시오.

+0

사실입니다. 증명 : http://jsfiddle.net/C2R8D/ 대괄호를 제거하기 위해 해당 요소의 ID를 변경하고 jQuery 선택기에서 동일한 변경을가했습니다. – weir

+0

다음은 ** 귀하의 ID를 그대로 유지할 수 있다는 증거입니다. jQuery selector.http : //jsfiddle.net/8REPj/에서 두 개의 백 슬래시로 대괄호를 이스케이프 처리하면됩니다. 그러나 @JAAulde는 HTML4 사양에서 올바른 ID가 아니므로 ID를 변경하는 것이 좋습니다. 체재. – weir

+1

예, 이스케이프 처리 된 선택기를 사용하면 선택자에서 일부 항목을 더 잘 사용할 수 있습니다. 구문과 방법론, IMO를 조정하는 것이 좋습니다. – JAAulde

관련 문제