2011-04-15 70 views
0

在我們的舊系統中,我們使用了YUI,但是新的使用了jQuery。我們有一個數據網格。在舊系統中,在mousedown事件中,我們使項目可拖動。鼠標停留下來,用戶拖動項目。我們這樣做是爲了避免讓所有東西都可拖動來保存資源。舊的代碼看起來像:如何處理jQuery中的事件?

function dragThisEntity(selfPtr,...) { 

//This is the function called when a user clicks on a draggable item in a report. 


var dragSpan = Dom.get('dragSpan'+refInst); 

//We now have a div that can be dragged to the calendar 

calEvent = new ZMRCalendarEvent('dragSpan'+refInst); 
calEvent.handleMouseDown(ev); 

在jQuery中,對鼠標按下,我們調用這個函數:

function makeDraggable(element){ 

    var target_id = '#' + element.id; 
    //alert(target_id); 
    $(target_id).draggable({scroll:true,scrollSensitivity:100,scrollSpeed:100}); 

} 

如果用戶再次點擊,跨度爲拖動。我需要的是使用戶不必再點擊......我與YUI線沒有繼續鼠標按下事件的能力,

calEvent.handleMouseDown(ev); 

請注意 - 我知道我可以讓所有的人可以在Dom上準備拖動。這不是我想要做的,因爲可能有數百個,如果不是必要的,我寧願不使用這些資源。我只想讓它們拖動,如果用戶點擊它們。

我不是在尋找Jquery UI拖放的基礎知識。我可以做到這一點。 :-)我正在嘗試更先進的方案來節約資源。

+0

你應該用jQuery的教程網站開始:http://docs.jquery.com/Main_Page也看拖動API站點:http:// jqueryui.com/demos/draggable/。這裏有很多例子,我敢打賭,如果你先閱讀如何使用這些函數,你會發現jQuery更容易。 – scrappedcola 2011-04-15 22:14:21

+1

@scrappedcola:僅僅因爲她以不同的方式接近解決方案並不意味着她沒有閱讀API或她需要一個教程。認爲問題不同的人會讓編碼變得有趣。 – 2011-04-15 22:26:36

回答

2

只需運行DOM準備好的.draggable()代碼即可。不過,您需要使用不同的選擇器。

$(function() 
{ 
    $('some selector').draggable({ 
     scroll:true, 
     scrollSensitivity:100, 
     scrollSpeed:100 
    }); 
}); 
+0

除非我脫離基地,那不是我想要做的。我不想讓所有這些類型的跨度可拖動。我只想讓它可以拖動,如果我點擊它。可能有數百人,如果我不需要,我不想消耗資源。 – 2011-04-15 22:13:19

+2

@Amy:jQuery高效地處理DOM事件綁定(請參閱:http://stackoverflow.com/questions/3162748/jquery-global-events-and-performance/3162988#3162988)提供跨瀏覽器,可維護的解決方案將帶您比將事件添加到所有跨度更多的時間。另外,jQuery 1.5中的DOM遍歷非常快。 – 2011-04-15 22:22:42

+0

由於Jim的評論,我將接受這個答案。我最終做的是在jqGrid的loadComplete事件中使所有跨度可拖動。 (跨度不在文件準備就緒)謝謝大家。 – 2011-04-16 14:49:50

1

jQuery UI .draggable()爲您處理mousedown/mouseup事件。

您需要做的就是在文檔加載時調用可拖動項目的可拖動。然後,你可以迴應事件。

例子是API頁面上此:http://jqueryui.com/demos/draggable/#events