2013-10-30 2 views
1

jQuery 이벤트 처리와 관련하여 이해할 수없는 부분이 있습니다. jQuery UI sortable widget을 사용하면서이 문제를 발견했습니다. 위젯에서 정렬 이벤트를 트리거하려고했습니다. 이 코드에 문제가jQuery UI 정렬 가능한 위젯에 대한 일관성없는 jQuery 이벤트 처리

$('ul').sortable({ 
    start: function() { console.log("drag started"); } 
}); 

// No output to the console from this line 
$('ul').trigger('sortstart'); 

있습니까 :

<ul> 
    <li>One</li> 
    <li>Two</li> 
    <li>Three</li> 
</ul> 

내가 이런 종류의 이벤트를 트리거을 시도하여 시작 :

이의 내가 간단한 HTML 목록이 있다고 가정 해 봅시다? 시작 콜백 함수가 호출되지 않습니다 ...이 콜백을 트리거 할 수있는 방법이 있습니까? 그러나 다음이 작동 함을 발견했습니다.

$('ul').sortable(); 
$('ul').on('sortstart', function() { console.log('drag started'); }); 

// This line does cause the console to output 'drag started' 
$('ul').trigger('sortstart'); 

처음 시도가 실패한 이유를 알고 싶습니다.

+0

플러그인의 sortstart 메소드가 트리거되지 않았지만 이벤트가 트리거되었을 수 있습니다. 내가 아는 한 내장 된 API를 사용하는 방법은 없다. 플러그인의 메소드에 접근해야한다. (그렇게 어렵지는 않을 것이다.'console.log ($ (element) .data())') –

답변

4

jQuery를-UI 위젯 이벤트

jQuery를-UI는 위젯이 트리거 모든 이벤트의 접두사를 사용합니다. ui.sortable 위젯의 경우 widgetEventPrefixsort입니다. 이것은 jQuery를-UI 코드에서 바로 촬영 정렬 위젯의 초기화 정보의 일부입니다 다음 정렬 위젯이이 sortstart 이벤트 (복합)를 발생시키는 start 이벤트에 대한 내부 trigger()를 호출 할 때, 그래서

widgetEventPrefix: "sort" 

하지만, 반드시 그 사건을 듣고 있다는 것을 의미하지는 않습니다. 1

첫 번째 예

예는 정렬 위젯의 Start 메소드에 콜백을 묶는 jQuery를 말한다. 이것은, start 메소드가 불려 갔을 때에 내부에서 불려갑니다. 코드의 트리거 부분 ($('ul').trigger('sortstart'))은 jQuery-ui가 내부적으로 트리거하는 이벤트와 동일한 이름을 갖는 이벤트를 방금 트리거합니다. jQuery-UI는이 이벤트를 수신하지 않으며이 트리거에 의해 어떤 식 으로든 호출되지 않습니다.

예 번째 예 직후 트리거 이벤트를위한 이벤트 핸들러를 배선은 2

; 그러나 이것은 실제로 정렬 가능한 위젯의 내부 코드를 호출하지 않습니다.

+0

좋은 답변입니다. 내부 'sortstart'이벤트를 트리거하는 방법이 있습니까? 즉, 드래그 시작 또는 중지를 위조하는 좋은 방법이 있습니까? –

+0

기능 자체는 위젯 내부에 있지만 간접적으로 메소드를 트리거하는 정렬 가능한 요소에 대한 이벤트를 트리거 할 수 있습니다. 정렬 가능한 요소에 대한 mousedown 이벤트의 트리거는 _mouseStart 메소드를 호출해야하지만, 이벤트 정보가 부족하기 때문에이 메소드를 의도 한 용도로 사용하지 않으므로 (이벤트에서 jQuery가 수집하는 모든 DOM 정보) . –

+1

고맙습니다. 제 친구 – Marco