2016-07-06 7 views
-1

위젯 생성 및 삭제 및 편집을 허용하는 JS 용 라이브러리를 작성하고 있습니다. 새 위젯을 만들면 "widget5"나 배열의 다음 번호와 같은 ID를 자동으로 가져옵니다. 삭제시 document.getElementById()가 id를 찾을 수 없으며 null을 반환합니다.document.getElementById()가 null을 반환합니다.

이 문제에 대해 많은 질문이 있다는 것을 알고 있습니다. 대답은 일반적으로 페이지보다 먼저 JavaScript 로딩과 관련이 있지만, 작성중인 위젯 라이브러리는 페이지가로드 된 후에 위젯을 추가하기 때문에, 문제가되지 마라.

JS를 사용하여 위젯을 만들 때 JS가 어떤 이유로 그것을 찾을 수 없다고 생각합니다. 예를 들어 위젯에서 하드 코드 된 JS는 id를 찾는 데 문제가 없습니다. 이 문제를 어떻게 해결할 수 있습니까?

도움을 주시면 감사하겠습니다.

div.setAttribute("id", " widget" + widgetNum); 
        ^here 
+0

위젯을 추가하는 코드를 추가하십시오 할 수 있습니다. –

답변

6

는 위젯 IDS 내부의 공간이있다

widget = widget.options[widget.selectedIndex].value; // instead of .text 
+0

상관 없어요 –

+0

그건 .. .. 공간을 제거하면 모든 것이 작동합니다 : http://codepen.io/anon/pen/vKJOyj 나는이 문제를 해결할 수있는 더 좋은 방법이 있지만이 방법은 버그의 주요 원인. – user3297291

+0

와우, 바보 같은 느낌이 들었습니다. – amstrudy

0

선택한 옵션의 값은 value atttribute에 저장됩니다 :

http://codepen.io/amstrudy/pen/grxpOK

//this is just the function that is supposed to find the id, check the codepen above for the full code 

    function deleteWidget(){ 
     var widget = document.getElementById("delList"); 
     widget = widget.options[widget.selectedIndex].text; 
     window.alert(widget); 
     widget = document.getElementById(widget); 
     window.alert(widget); 
     document.getElementById("body").removeChild(widget); 
    } 
+0

이 예제에서 정확하다면, 값과 텍스트는 delList.options [delList.options.length] = new Option ("widget"+ ( –

+1

'value' 속성을 사용하는 것이 더 정확하기 때문에 OP는 두 가지 해결책을 모두 적용해야하므로 임의의 옵션 제목도 사용할 수 있다고 생각합니다. –

0

당신 선도적 인 공간이 이드 내에서.

widget = document.getElementById(widget); 

에 : 당신의 deleteWidget 기능 변화에

widget = document.getElementById(" " + widget); 

하거나 제거 공간

div.setAttribute("id", "widget" + widgetNum); 

여기에 고정 : http://codepen.io/theConstructor/pen/XKabpj

희망이

관련 문제