2013-08-20 3 views
1

단추를 클릭 할 때마다 행이 추가되는 테이블이 포함 된 html 형식의 테이블이 있습니다. 각 행을 추가 할 때 첫 번째 행의 "Id.0"에서 두 번째 행의 "Id.1"로 업데이트 할 새 행의 각 필드 이름과 ID (네 개 있음) 세 번째의 Id.2 "는 등 내가 ID로 같은 논리가 이름 속성에 적용되지 않습니다 내가 찾은 그러나추가 된 테이블 행 필드의 이름 변경 jQuery

var next=$("#QualificationRequirements tr:last").clone(); 

fixIds(next,nexdex); 

nexdex++; 

$("#QualificationRequirements").append(next); 



function fixIds(element, counter) { 
    $(element).find("[id]").add(element).each(function() { 
     this.id = this.id.replace(/\d+$/, "")+counter; 
    } 

} 

$(element).find("[name]").add(element).each(function() { 
    this.name = this.name.replace(/\d+$/, "")+counter; 
}); 
를 사용하여 문제를이 작업을 수행 할 수 없습니다

null 개체에서 "바꾸기"를 호출 할 수 없다는 오류가 발생하여 name 특성을 찾을 수없는 것으로 보입니다.

내가 뭘 잘못하고 있는지 누가 알 수 있습니까? 감사!

+2

오류가 발생할 때마다 알려주십시오. –

답변

2

보십시오 : add(element)

참조를 element는 전체 행을 의미하며, 행 이름 속성이 없습니다. 이름 속성을 가진 행 내부의 입력에 따라 코드에서 해당 부분을 제거해야하므로 코드에서 해당 부분을 제거해야합니다.

$(element).find("[name]").each(function() { 
    this.name = this.name.replace(/\d+$/, "")+counter; 
}); 
1

HTML 요소에 name 속성이 없습니다. 대신 당신은 속성으로 접근해야합니다 :

this.setAttribute('name', this.getAttribute('name').replace(/\d+$/, "")+counter); 

Working Demo

1

사용 $(this).attr('name');을 얻고 이름 속성을 설정할 수 있습니다.

전체 라인 :

$(this).attr('name',$(this).attr('name').replace(/\d+$/, "")+counter); 
+0

'each()'함수 안에서'this'는 jQuery 객체가 아닌 HTML 요소를 참조하므로'attr()'을 사용하면 에러가 발생합니다. – cfs

+0

당신 말이 맞습니다. –

0

이 문제는 명세서의이 부분에서 오는이

$(element).find("[name]").add(element).each(function() { 
    this.attr("name",this.attr('name').replace(/\d+$/, "")+counter) ; 
});