2010-12-02 5 views
0

최근에 우리 회사에서 웹 기반 제품을 인수했습니다. 그것은 원래 Dojo의 이전 버전을 Catalyst/Template Toolkit에서 실행하여 개발되었습니다 (그래서 모두 백엔드에서 Perl에 제출됩니다). 그 이후로 나는 적어도 최신 정보를 얻고 Dojo에갔습니다. 1.5Dojo를 사용하여 div id 조작하기

특히 해결해야하는 문제는 div id와 관련이 있습니다. 그것은 콤보 상자, 선택 풀다운 및 텍스트 상자가 처음에있는 양식 페이지입니다. 간결성, 나는이 응축거야 ..... html로는 (제목 = "삭제"

<div id="actions"> 
     <div id="prelim_actions_1_div"> 
    Variable: <input type="text" value="" 
       class=lighttext size=50 
       id="prelim_actions_xvar_1" 
       name="prelim_actions_xvar_1"/> 

    <a href="javascript:void();" title="Delete" 
     onclick="delete_section('prelim_actions_1_div')"> 
     <img src="http://localhost:3000/static/images/16-square-red-delete.png"/></a> 

    <a href="javascript:void();" title="Insert Below" 
    onclick="add_action_below('prelim_actions', 'prelim_actions_1_div')"> 
    <img src="http://localhost:3000/static/images/16-em-down.png"/></a> 

    </div> 
</div> 

첫 번째 자바 스크립트 href가이 텍스트 상자를 삭제할 수 있습니다 .... 다음과 같습니다 두 번째 ID 상자를 사용하면 div id를 성공적으로 증가시키는 다른 텍스트 상자를 추가 할 수 있습니다. 그 안에 성공적으로 둥지 ...

<div id="prelim_actions_1_div"> 
........ 
........ 
</div> 
<div id="prelim_actions_2_div"> 
.... 
.... 
</div> 

문제가 있음을 댕 자바 스크립트 기능을 삭제할 것

<div id="actions"> 

위의 예에서. 나는 실제 사용자처럼 추가하고 삭제하는 다양한 조합을 통해 Firebug에서 이미 등록 된 div를 등록하여 오류를 발생시키고 동일한 이름의 여러 div ID를 성공적으로 작성함으로써 가능하다는 것을 발견했습니다.

내 질문에 해결책을 입력 해 줄 사람을 찾고있는 것이 아닙니다. 그러나 이것을 시도하고 배우는 것이 필요합니다. 더 쉽게 달성 할 수있는 방법인지 여부입니다. 그것은 동적으로 텍스트 상자를 추가 및 삭제할 수 있고 제출 단추가 눌려지기 전에 각 텍스트 상자에 고유 한 div ID (및 이름)가 있는지 확인해야합니다.

모든 dojo/javascript 전문가가 올바른 방향으로 나를 가리켜 줄 수있는 지혜 또는 링크가 있습니다. Janie

+0

DIV를 피하고 필요한 패턴이나 클래스를 기반으로 쿼리를 수행하면 충돌 문제없이 재사용 할 수 있습니다. – peller

+0

@peller : Ryley의 솔루션이 충돌 문제를 해결합니다. 나는 그의 해답 아래의 해답을 어떻게 지적한다. 그래도 대체 아이디어를 가져 주셔서 감사합니다. JW –

답변

1

많은 것들은 지금 delete_sectionadd_action_below의 작동 방식에 달려 있습니다. 나는 당신이 delete_section 아주 바보 만들 것을 제안합니다 - 그냥 맹목적으로 전달 된 사업부를 삭제하여 add_action_below 기능을 수행 할 때이 같은 수행합니다.

//figure out the next available spot 
var i = 1; 
while(dojo.query('#prelim_actions_'+i).length){ 
    i++; 
} 

console.log('available id: prelim_actions_'+i); 
//create div contents 
//append after clicked section 

잘 모르겠어요 어떻게 앱 작품의 백엔드,하지만를 가장 아마도 매개 변수를 통과하고 prelim_actions_xvar_.*이라는 이름의 문자를 찾을 수 있습니다.

+0

이것은 대단한 시작입니다. Ryley! 여기 내 질문에 대답하기위한 가상의 업장이 있습니다. JW –

+0

이것이 내 문제를 해결 한 이유입니다. 이전에 나는 추가 섹션을 몇 개의 div가 있는지 세고, "3"이라면 다음 숫자는 4 "가 될 것입니다. 표면에 좋게 들리지만, 4 div가 있으면 삭제 해 봅시다. 그 다음에 이미 "4"라는 이름이 붙어서 "4"와 충돌하게됩니다. Ryley의 해결책은 1에서 다음 숫자로 넘어갑니다 (예를 들어 "3"이 될 것임). 그런 다음 1, 2,4,3을 내 divs. 순서대로 아니지만 그들은 필요하지 않습니다, 그들은 단지 고유성이 필요합니다.이 고유성 "이름"특성에 관한 핵심입니다. –

관련 문제