2010-02-04 2 views
3

여러 요소를 선택하고 드래그하는 스크립트가 있습니다. 그것은 잘 작동하지만 그 기능에 또 다른 새로운 요소를 추가하려면 DOM에 추가하면 작동하지 않습니다. 이 기능은 다음과 같습니다DOM에 추가 된 jQuery 새 요소가 작동하지 않습니다.

$(function() { 
     var selected = $([]), offset = {top:0, left:0}; 
     $("#selectable1").selectable(); 

     $("#selectable1 span").draggable({ 
      start: function(ev, ui) { 
       $(this).is(".ui-selected") || $(".ui-selected").removeClass("ui-selected"); 

       $("span").removeClass("cica"); // ads class Cica to the draged/selected element 
       $(this).addClass("cica"); 

       selected = $(".ui-selected").each(function() { 
        var el = $(this); 
        el.data("offset", el.offset()); 
        $(this).text("Selected and dragging object(s)"); 
       }); 

       offset = $(this).offset(); 
      }, 
      drag: function(ev, ui) { 
       var dt = ui.position.top - offset.top, dl = ui.position.left - offset.left; 
       selected.not(this).each(function() { 

        var el = $(this), off = el.data("offset"); 
        el.css({top: off.top + dt, left: off.left + dl}); 

       }); 

      }, 
      stop: function(ev, ui){ 
       $(this).text("Drag has stopped"); 
      } 
     }); 
    }); 

새로운 요소는 다음과 같이 추가됩니다

$('<span class="drag">Xia</span>').appendTo('#selectable1'); 

나는 그것이 작동하지만 난 어디 스크립트를 추가하는 방법 모르는 만들기 위해 라이브 사용할 수 있다는 것을 알고. 클릭, 마우스 오버와 같은 이벤트에 추가하는 방법 만 알고 있습니다.

이 도움말에 대한 의견이 있으면 알려주십시오.

답변

3

내가 할 줄 것은 "dragSetup"라는 만들어 낸 이벤트에 대한 이벤트 핸들러와 "#의 selectables1"을 설정하는 것입니다 감사합니다. 이 같은 표정 무언가 : 다음

$('#selectables1').bind('dragSetup', function() { 
    $(this).find('span:not(.dragReady)') 
    .draggable({ ... }) 
    .addClass('dragReady'); 
}); 

새를 추가 할 때마다 당신은 단지 호출 할 수

$('#selectables1').trigger('dragSetup'); 
+0

뾰족한는,이 회선에 자동 구문 오류 : $ (이) .find를 ('기간 :하지 (.dragReady)') 나는 그것을 수정하고 그것이 – Mircea

+0

을하려고 줄 수 있다면 내가 내가 볼 꼬리표 "i"를 제거하십시오 - 그것은 오타입니다 :-) 그 점에 대해 미안합니다; 나는 대답을 편집 할 것이다. – Pointy

+0

네, 코드 작성을 완료했습니다. 새로운 요소를 드래그 가능하게 만들지 만 함수 자체를 죽입니다. 즉,이 기능은 동시에 요소를 선택 가능하고 드래그 가능하게 만드는 것을 의미합니다. 아마 당신의 솔루션을 제대로 구현하지 못했을 것입니다. 나는 이것에 대해 좀 더 살펴볼 필요가있다. – Mircea

2

을 당신은 한 번 추가 된 DOM 요소에 이벤트를 연결하는 live을 사용해야합니다 DOM이로드되었습니다. jQuery Doc for live

+0

같은 대답을 입력하는 중이었습니다. – RKitson

+0

2 가지 - 1) ~ 할 필요는 없지만 더 좋은 방법입니다. 2) .live()가 실제로 어떻게 작동하는지에 대한 정확한 설명이 아닙니다. 이벤트가 거품을 내고, 실제로 아무것도 생성되지 않거나 새로운 요소로 첨부되지 않는다는 사실에 의존하는 문서 수준에서 청취합니다. 같은 문서 레벨 청취자는 새로운 요소의 이벤트를 버블 링하기 때문에 단순히 같은 방식으로 이벤트를 잡습니다. –

+0

"라이브"는 요소에서 "드래그 가능한"플러그인을 사용하면서 어떻게 작동합니까? 즉, "라이브"가 "드래그 가능"기능을 어떻게 활용할 것인가? – Pointy