2010-01-25 7 views
1

다음과 같은 문제가 있습니다. jQuery를 사용하여 페이지에 추가 입력 양식을 추가하고 있습니다. 그러나 추가 된 행은 양식 제출과 함께 서버로 전달되지 않습니다. 나는 자바 스크립트 복제에 대한jquery .clone() Firefox에서 이상한 동작

<form name="form1" method="post" action=""> 

<div id="input1" class="clonedInput"> 

<label for="answer1" class="answer_label"> Answer: </label> 
<input type="text" name="answer1" id="answer1" value="Answ1"/> 
<label for="answer1pt"> Points: </label> 
<input type="text" name="answer1pt" id="answer1pt" size="2" value="1"/> 

다음을 사용 : 여기

한 행의 HTML 모든 내용

$('#btnAddAnswer').click(function() { 

var num = $('.clonedInput').length; 
var newNum = new Number(num + 1); 
var newElem = $('#input' + num).clone().attr('id', 'input' + newNum); 

newElem.find(":nth-child(1)").attr('for', 'answer' + newNum); 
newElem.find(":nth-child(2)").attr('id', 'answer' + newNum).attr('name', 'answer' + newNum).attr('value', ''); 
newElem.find(":nth-child(3)").attr('for', 'answer' + newNum + 'pt'); 
newElem.find(":nth-child(4)").attr('id', 'answer' + newNum + 'pt').attr('name', 'answer' + newNum + 'pt').attr('value', ''); 

$('#input' + num).after(newElem); 
$('#btnDelAnswer').attr('disabled',''); 

if (newNum == 5) 
     $('#btnAddAnswer').attr('disabled','disabled'); 
}); 

그래서 기본적으로 내가 먼저 복제 DIV 후 바로 ID 년대와 다른 속성을 조정합니다.

문제는이 코드를 실행할 때 페이지에 모든 내용이 표시되고 정상적으로 보이지만 양식을 제출하면 첫 번째 요소 만 서버로 전송된다는 것입니다.

이 코드는 Chrome 및 IE에서도 완벽하게 작동하지만 Firefox에서는 작동하지 않습니다. 내가 뭘 잘못하고 무엇이 문제를 일으키는 지에 대한 제안?

미리 감사드립니다.

+0

다음과 같은 부가 기능을 사용해보세요. 파이어 버그 그래서 자바 스크립트의 html 출력을 볼 수 있습니다, 거기에 아무 것도 없다면 참조하십시오. – Gazler

+0

이미 chechked - HTML은 괜찮습니다. 어떤 종류의 것으로 보인다. FF 버그. 다른 아이디어를 어떻게 다른 jQuery 메서드를 사용하여 동일한 작업을 수행 할 수 있습니까? – IvanR

답변

1

. 감사합니다 Gazler, 아무 문제가 없었다하더라도 실제 HTML 및 Firefox 오류 콘솔에서 메시지가 표시되지 않으면 Chrome에서 Developers Tools를 확인한 결과 div 태그가 모든 문제를 일으킨 것으로 보입니다.

0

nth-child 대신 클래스를 사용하여 셀렉터를 정리할 것을 강력히 권장 할 수 있습니까? 모든 코드를보다 쉽게 ​​읽을 수 있습니다.

<label class="answer-label" for="answer1">...</label> 
<input type="text" class="answer-box" name="answer1" class="answer1" /> 

그런 다음이 예뻐 자바 스크립트를 사용할 수 있습니다 : 예를 들어, 당신이 있다면 같은 마크 업

newElem.find(".answer-label").attr('for', 'answer' + newNum); 

또한, 당신은 단지 대신 납입 및 newNum의 하나 개의 변수를 저장하는 것을 고려할 수 있습니다. 그렇게하면 var newNum = new Number(num+1); 대신에 num++;을 그냥 할 수 있습니다. (나는 또한 당신이 new Number(num+1) 대신 var newNum = num+1;의 할 왜 안 확신한다.

의심, 당신의 코드를 정리하고 때 일이 단지 자신을 해결할 수 있습니다. 문제가 해결

+0

빠른 답장을 보내 주셔서 감사합니다. 그러나 여전히 작동하지 않습니다. 사실이 코드를 하나의 블로그 (http://charlie.griefer.com/blog/index.cfm/2009/9/17/jQuery--Dynamically-Adding-Form-Elements)에서 빌 렸으며 자신을 귀찮게하지 않았습니다. 청소해라. – IvanR