문제

저는 Dojo 드래그 앤 드롭을 사용하고 있습니다.사용자가 컨테이너(div dojoType='dojo.dnd.Source')에 항목을 추가하면 나중에 사용자가 전체 페이지를 제출할 때 서버에서 처리할 수 있도록 해당 데이터를 양식으로 가져와야 합니다.그 부분이 작동하고 있습니다.그런 다음 항목을 제거하려면 항목을 "휴지통" 컨테이너에 끌어다 놓을 수 있도록 허용합니다.숨겨진 필드에서 항목을 제거하는 방법을 개념화하는 데 어려움을 겪고 있습니다.다음 두 함수를 호출하기 위한 구독/이벤트 코드가 이미 있습니다.

RemoveGoalFromHiddenFields 기능을 수행하는 더 좋은 방법이 있는지 알려주실 수 있나요?"하위 목표" 항목은 여러 개가 있을 수 있습니다.

아래에 있는 내용으로 테스트를 시작하려고 하는데 이에 대해 약간의 의문이 있습니다.

감사해요,

닐 월터스

   function addGoalToHiddenFields( goalText){
      var field = document.createElement("input");
      field.setAttribute("type","hidden");
      field.setAttribute("value",goalText);
      field.setAttribute("name","subgoal");

      //add new hidden-element to the existing form
      document.getElementById("form1").appendChild(field);
   }

   function removeGoalFromHiddenFields( goalText){

      //remove hidden field 
      nodes = document.getElementById("form1")
      for (i=0;i<nodes.length ;i++ )
           {
             var pos = nodes[i].innerHTML.IndexOf(goalText)
             if (pos > 0)
             {
                 nodes.removeChild(node[i]);

             }
           }

}

또한 대신 이렇게 할 수 있나요?노드 = document.getElementById("하위 목표")

도움이 되었습니까?

해결책

여기서 원하는 것은 다음의 기능인 것 같습니다. 도장.쿼리.

다음과 같이 시도해 보세요:

dojo.query("#form1 input[value=\"" + goalText + "\"]").forEach(function(field) {
    field.parentNode.removeChild(field)
});

다른 팁

field.setAttribute("유형","숨김");

HTML 문서에서는 setAttribute를 사용하지 마세요.IE에는 버그가 많습니다.읽기 쉬운 일반 DOM-HTML 속성을 사용하세요.

field.type= 'hidden';

var pos = node[i].innerHTML.IndexOf(goalText)

HTML 마크업을 통해 값을 검색하는 것은 어리석은 일이며 HTML이 이스케이프하는 '<' 또는 '&'와 같은 문자가 goalText에 포함되어 있으면 작동하지 않습니다.

위 코드의 경우 다음과 같습니다. nodes[i] 다음 중 하나여야 합니다. <input> 거기에 추가한 요소는 다음과 같습니다. innerHTML 입력 내용만 검색하므로 좋지 않습니다. 입력은 빈 요소이므로 아무 것도 아닙니다.대신 다음을 살펴보세요. value 당신이 거기에 넣은 재산:

var input= nodes[i];
if (input.name=='subgoal' && input.value==goalText)
    input.parentNode.removeChild(input);

또한 대신 이렇게 할 수 있나요?노드 = document.getElementById("하위 목표")

아니요. 하위 목표 요소에는 ID가 없기 때문입니다.이름으로 가져오기:

var subgoals= form.getElementsByName('subgoal');

(DOM-0과 동일합니다.)

var subgoals= form.elements.subgoal;

또는 나중에 검색하는 데 도움이 되도록 각 하위 목표에 ID를 추가하세요.

field.id= 'id-'+goalText;

goalText에 특수 문자가 있으면 위의 내용은 다시 작동하지 않습니다.

또는 DOM에 모든 것을 넣는 대신 JavaScript에서 자체 조회를 유지하세요.

var subgoalfields= {};
...
// on add
subgoalfields[goalText]= field;
...
// on remove
subgoalfields[goalText].parentNode.removeChild(subgoalfields[goalText]);
delete subgoalfields[goalText];
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top