2012-04-17 4 views
1

나는 여기에있는 해결책을 시도했다 : How do I add a delay in a JavaScript loop? 그러나 나는 그것이 나를 위해 일하게 만들 수 없었다.For 루프에 지연 추가

jQuery.fn.createEntry = function() { 
     $("#List").append('<span>New Entry</span>'); 
     $("#List span").draggable({ grid: [30,45] }); 
    } 

    jQuery.fn.tenTimes = function() { 
     for (var i = 1; i <= 10; i++){ 
      $(document).createEntry(); 
     } 
    } 

.createEntry() 스크립트에서 새 개체는 내가 가지고있는 .draggable() 플러그인에 바인딩됩니다. 이 단축키 함수()를 실행하기 위해 키보드 단축키 (keyup)를 사용하고 있습니다. 키를 두 번 이상 빠르게 누르면 많은 새 객체가 드래그되지 않습니다. 그것은 겉으로보기에는 무작위로 개체가 draggable되지 않습니다. 아마도 빠른 키 누름으로 인해 실패한 바인드 이벤트가 중단 될 것이라고 생각했지만, 느리게 진행될 경우 일부는 드래그 할 수 없게되었습니다.

for 루프로 이동하기 전에 개체가 제대로 바인딩되었는지 확인할 수있는 방법이 있습니까? 엄격한 접근 방법이 있습니까? 불행히도 이것은 애니메이션이 아니므로 .delay()를 사용할 수 없습니다.

해결책은 문제를 일으키는 것과 appendTo를 사용하여 요소를() 처리 내가가는했던 3 스크립트이었다.

append() 또는 appendTo()를 사용하면 객체를 드래그 가능으로 바인딩 된 상태로 유지하는 것처럼 보였지만 도중에 왼쪽/위로 CSS가 손실되어 드래그 할 수 없습니다. 일부 .css() 해킹 (각 값은 고유 한 값)을 알아 내기보다는 새 요소를 만든 다음 관련 데이터를 복사 한 다음 이전 데이터를 제거()합니다. Draggable은 다른 지점에서 제대로 바인딩됩니다. 이 문제는 해결되었습니다.

+1

문제는 createEntry() 함수에있는 것 같습니다. –

+0

'createEntry'를 게시 할 수 있습니까? –

+0

@joeframbach - 함수를 추가했습니다. 매우 베어, 왜 내가 그것을 생략하지만 구문을 깨고있어 수 있습니다. –

답변

1

편집

.setTimeout을 시도()

난 당신이 .Delay()를 사용할 수 없습니다 말했다 읽지 않았다. 당신은 아마 당신의 span 이미 기존의 모든 draggable을 다시 적용하지 않기 때문에

여담으로
+0

질문을 다시 읽으십시오. * "불행히도 이것은 애니메이션이 아니므로 .delay()를 사용할 수 없습니다."* – Ryan

0

, 당신은

jQuery.fn.createEntry = function() { 
    $("#List").append($('<span>New Entry</span>').draggable({ grid: [30,45] })); 
} 

jQuery.fn.createEntry = function() { 
    $("#List").append('<span>New Entry</span>'); 
    $("#List span").draggable({ grid: [30,45] }); 
} 

를 대체하여 약간의 성능 향상을 찾을 수 있습니다 에스.

사실, 이것이 코드 위반 원인 일 것입니다. 첫 번째 span에는 draggable이 10 번 다시 적용됩니다. 엡데도가 draggable입니까?