루프 및 removeChild ()하여 제거해도 여분의 <br/>이 나타납니다.

user6359350

제목에서 알 수 있듯이이 행동에 대한 용의자를 찾을 수없는 것 같습니다.

내 스크립트는 다음과 같습니다.

function myFunction() {
        var marriedInputs = document.getElementById("marriedInputs");
        var status = document.getElementById("maritalStatusList").value;
        if (status == "Married") {
            var breaks = marriedInputs.getElementsByTagName("BR");
            for (var i = 0; i < breaks.length; i++) {
                    marriedInputs.removeChild(breaks[i]);
            }
            var spouseLabel = document.createElement("LABEL");
            spouseLabel.setAttribute("id", "spouseLabelID");
            spouseLabel.for = document.getElementById("spouseLname");
            var spouseLabelText = document.createTextNode("SPOUSE: ");
            spouseLabel.appendChild(spouseLabelText);

            var spouseLnameInput = document.createElement("INPUT");
            spouseLnameInput.setAttribute("id","spouseLname");
            spouseLnameInput.setAttribute("type","text");
            spouseLnameInput.setAttribute("name","spouseLastName");
            spouseLnameInput.setAttribute("placeholder","Last Name");

            var spouseFnameInput = document.createElement("INPUT");
            spouseFnameInput.setAttribute("id","spouseFname");
            spouseFnameInput.setAttribute("type","text");
            spouseLnameInput.setAttribute("name","spouseFirstName");
            spouseFnameInput.setAttribute("placeholder","First Name");

            var spouseMnameInput = document.createElement("INPUT");
            spouseMnameInput.setAttribute("id","spouseMname");
            spouseMnameInput.setAttribute("type","text");
            spouseLnameInput.setAttribute("name","spouseMiddleName");
            spouseMnameInput.setAttribute("placeholder","Middle Name");

            var childrenNumInput = document.createElement("INPUT");
            childrenNumInput.setAttribute("id","childrenNum");
            childrenNumInput.setAttribute("type","text");
            childrenNumInput.setAttribute("name","numOfChildren");
            childrenNumInput.setAttribute("placeholder","Number of Children");
            childrenNumInput.setAttribute("onkeypress","return isNumberKey(event)");

            var contactNumInput = document.createElement("INPUT");
            contactNumInput.setAttribute("id","contactNum");
            contactNumInput.setAttribute("type","text");
            contactNumInput.setAttribute("name","spouseContactNo");
            contactNumInput.setAttribute("placeholder","Contact Number");
            contactNumInput.setAttribute("onkeypress","return isNumberKey(event)");

            var addressInput = document.createElement("INPUT");
            addressInput.setAttribute("id","address");
            addressInput.setAttribute("type","text");
            addressInput.setAttribute("name","spouseAddress");
            addressInput.setAttribute("placeholder","Address");

            marriedInputs.appendChild(spouseLabel);
            marriedInputs.appendChild(document.createElement("BR"));
            marriedInputs.appendChild(spouseLnameInput);
            marriedInputs.appendChild(document.createElement("BR"));
            marriedInputs.appendChild(spouseFnameInput);
            marriedInputs.appendChild(document.createElement("BR"));
            marriedInputs.appendChild(spouseMnameInput);
            marriedInputs.appendChild(document.createElement("BR"));
            marriedInputs.appendChild(childrenNumInput);
            marriedInputs.appendChild(document.createElement("BR"));
            marriedInputs.appendChild(contactNumInput);
            marriedInputs.appendChild(document.createElement("BR"));
            marriedInputs.appendChild(addressInput);
            marriedInputs.appendChild(document.createElement("BR"));

            document.getElementById("spouseLname").required = true;
            document.getElementById("spouseFname").required = true;
            document.getElementById("spouseMname").required = true;
            document.getElementById("childrenNum").required = true;
            document.getElementById("contactNum").required = true;
            document.getElementById("address").required = true;
        } else {
            if (document.body.contains(document.getElementById("spouseLname"))) {
                var breaks = marriedInputs.getElementsByTagName("BR");
                for (var i = 0; i < breaks.length; i++) {
                    marriedInputs.removeChild(breaks[i]);
                }
                marriedInputs.removeChild(document.getElementById("spouseLabelID"));
                marriedInputs.removeChild(document.getElementById("spouseLname"));
                marriedInputs.removeChild(document.getElementById("spouseFname"));
                marriedInputs.removeChild(document.getElementById("spouseMname"));
                marriedInputs.removeChild(document.getElementById("childrenNum"));
                marriedInputs.removeChild(document.getElementById("contactNum"));
                marriedInputs.removeChild(document.getElementById("address"));
            }
        }  
    }

누구든지 문제를 정확히 지적 할 수 있습니까? 나는 실제로 js 사람이 아니며 선택 요소의 일부 변경을 위해 이것을 필요로했습니다.

이 스크립트의 더 깨끗한 버전을 작성하는 데 도움이되는 모든 팁을 감사드립니다. 건배!!

HTML을 잊어 버렸습니다.

Marital Status: 
<select id="maritalStatusList" onchange="myFunction()">
    <option value="Single">Single
    <option value="Married">Married
    <option value="Divorced">Divorced
    <option value="Widowed">Widowed
 </select>
 <div id="marriedInputs">

 </div>
Rajesh

를 가져오고 br제거하는 데 몇 가지 문제가 있습니다. 나는 그것을 querySelector로 바꾸려고 시도했지만 잘 작동했습니다.

function removeBRs() {
  var breaks = document.querySelectorAll('#marriedInputs br')
  for (var i = 0; i < breaks.length; i++) {
    marriedInputs.removeChild(breaks[i]);
  }
}

JSFiddle .

또한 부수적으로 많은 중복 코드가 있습니다. 공통 논리를 사용하여 더 작은 함수로 내보내십시오. 또한 married컨테이너 내부의 case에 대한 모든 필드를 래핑 div하고이 div를 main에 추가 할 수 있습니다 #marriedInputs. 이렇게하면 쉽게 제거 할 수 있습니다.

다음은 업데이트 된 JSFiddle 입니다. 그래도 wrapper div대신 사용 하는 것이 좋습니다 br. 또한 사용을 제거 removeBRs하고 삭제했습니다.

도움이 되었기를 바랍니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

여러 for 및 ifs / elifs로 이해를 나열하도록 루프를 단축

분류에서Dev

삭제 된 데이터베이스는 여전히 리프 노드에 나타납니다.

분류에서Dev

Matlab, 하나의 라이너를 사용하여 for 루프 제거

분류에서Dev

ScrollView의 페이징이 작동하지 않거나 나타납니다.

분류에서Dev

하나의 루프 사이클로 BeautifulSoup을 사용하여 단락 및 후속 요소 구문 분석

분류에서Dev

여러 창에 나타나도록 설정된 Tkinter 위젯이 동일한 창에 나타납니다.

분류에서Dev

제거 된 스냅 응용 프로그램이 여전히 응용 프로그램 표시?에 나타납니다.

분류에서Dev

PC 전원을 켤 때 검은 색 화면이 나타납니다. 전원 플러그를 제거하고 다시 연결하여 해결됨

분류에서Dev

새로 고칠 때 모든 이미지 탭이 점프하여 페이지에 나타납니다.

분류에서Dev

C 배열을 분해하면 이상한 결과가 나타납니다.

분류에서Dev

Javascript removeChild가 루프 내부의 모든 요소를 제거하지 않음

분류에서Dev

개발중인 프로그램에서 Java를 사용하여 웹캠을 열어야합니다. 이를 위해 나는 opencv를 사용하여 코딩했지만 다음과 같은 예외 팝업이 나타납니다.

분류에서Dev

DataGrid : 이유없이 하나의 행이 나타납니다.

분류에서Dev

for 루프를 사용하여 달이 나타나지 않습니다.

분류에서Dev

Google 캘린더에서 제거 된 이벤트가 여전히 목록에 나타납니다.

분류에서Dev

Win7에서 VirtualBox를 통해 우분투를 부팅하면이 프롬프트 후 검은 색 화면이 나타납니다.

분류에서Dev

Win7에서 VirtualBox를 통해 우분투를 부팅하면이 프롬프트 후 검은 색 화면이 나타납니다.

분류에서Dev

런처를 사용하여 김프를 닫은 후 다시 열면 레이어 및 도구 상자 창이 나타나지 않습니다.

분류에서Dev

자체 데이터가있는 mutate_at 및 max () 함수를 사용하여 R에서 코드를 시도했습니다. 경고 메시지가 나타납니다. max에 누락되지 않은 인수가 없습니다.

분류에서Dev

SSH : StrictHostKeyChecking이 no로 설정되었지만 여전히 프롬프트가 나타납니다.

분류에서Dev

Oracle Forms 팝업 창이 여러 번 나타납니다.

분류에서Dev

Javascript : 여러 루프 증분으로 기울이기 및 회전 열거

분류에서Dev

과거의 알림이 현재에 나타납니다.

분류에서Dev

삭제 된 분기가 여전히 Visual Studio의 다른 인스턴스에 나타납니다.

분류에서Dev

while 루프를 사용하여 데이터를 제거합니다.

분류에서Dev

VirtualBox의 Ubuntu로 인해 검은 화면이 나타납니다.

분류에서Dev

VirtualBox의 Ubuntu로 인해 검은 화면이 나타납니다.

분류에서Dev

버튼을 눌러 월을 변경하면 fullCalendar의 삭제 된 이벤트가 다시 나타납니다.

분류에서Dev

원하지 않는 오프셋이 브라우저의 왼쪽과 상단에 나타납니다.

Related 관련 기사

  1. 1

    여러 for 및 ifs / elifs로 이해를 나열하도록 루프를 단축

  2. 2

    삭제 된 데이터베이스는 여전히 리프 노드에 나타납니다.

  3. 3

    Matlab, 하나의 라이너를 사용하여 for 루프 제거

  4. 4

    ScrollView의 페이징이 작동하지 않거나 나타납니다.

  5. 5

    하나의 루프 사이클로 BeautifulSoup을 사용하여 단락 및 후속 요소 구문 분석

  6. 6

    여러 창에 나타나도록 설정된 Tkinter 위젯이 동일한 창에 나타납니다.

  7. 7

    제거 된 스냅 응용 프로그램이 여전히 응용 프로그램 표시?에 나타납니다.

  8. 8

    PC 전원을 켤 때 검은 색 화면이 나타납니다. 전원 플러그를 제거하고 다시 연결하여 해결됨

  9. 9

    새로 고칠 때 모든 이미지 탭이 점프하여 페이지에 나타납니다.

  10. 10

    C 배열을 분해하면 이상한 결과가 나타납니다.

  11. 11

    Javascript removeChild가 루프 내부의 모든 요소를 제거하지 않음

  12. 12

    개발중인 프로그램에서 Java를 사용하여 웹캠을 열어야합니다. 이를 위해 나는 opencv를 사용하여 코딩했지만 다음과 같은 예외 팝업이 나타납니다.

  13. 13

    DataGrid : 이유없이 하나의 행이 나타납니다.

  14. 14

    for 루프를 사용하여 달이 나타나지 않습니다.

  15. 15

    Google 캘린더에서 제거 된 이벤트가 여전히 목록에 나타납니다.

  16. 16

    Win7에서 VirtualBox를 통해 우분투를 부팅하면이 프롬프트 후 검은 색 화면이 나타납니다.

  17. 17

    Win7에서 VirtualBox를 통해 우분투를 부팅하면이 프롬프트 후 검은 색 화면이 나타납니다.

  18. 18

    런처를 사용하여 김프를 닫은 후 다시 열면 레이어 및 도구 상자 창이 나타나지 않습니다.

  19. 19

    자체 데이터가있는 mutate_at 및 max () 함수를 사용하여 R에서 코드를 시도했습니다. 경고 메시지가 나타납니다. max에 누락되지 않은 인수가 없습니다.

  20. 20

    SSH : StrictHostKeyChecking이 no로 설정되었지만 여전히 프롬프트가 나타납니다.

  21. 21

    Oracle Forms 팝업 창이 여러 번 나타납니다.

  22. 22

    Javascript : 여러 루프 증분으로 기울이기 및 회전 열거

  23. 23

    과거의 알림이 현재에 나타납니다.

  24. 24

    삭제 된 분기가 여전히 Visual Studio의 다른 인스턴스에 나타납니다.

  25. 25

    while 루프를 사용하여 데이터를 제거합니다.

  26. 26

    VirtualBox의 Ubuntu로 인해 검은 화면이 나타납니다.

  27. 27

    VirtualBox의 Ubuntu로 인해 검은 화면이 나타납니다.

  28. 28

    버튼을 눌러 월을 변경하면 fullCalendar의 삭제 된 이벤트가 다시 나타납니다.

  29. 29

    원하지 않는 오프셋이 브라우저의 왼쪽과 상단에 나타납니다.

뜨겁다태그

보관