2012-01-20 58 views
4

我知道jQuery可以以編程方式觸發正在監聽這些事件的DOM元素上的事件。例如,$el.click()將觸發$el上的點擊事件,而不必用鼠標物理地點擊$el使用JavaScript模擬拖放

給定兩個DOM元素dom1dom2,是否有可能以編程模擬從dom1使用jQuery(或香草的JavaScript)拖動和放下到dom2,其中dom1是拖動和dom2是可投放使用jQuery UI。

注意:我想這樣做的原因是構建自動化的UI測試。

+0

「觸發拖和下降」是一個有點含糊。我認爲你想創建一個拖放式界面,但是你的意思是「我想使用[不存在的]內置拖放事件」? – Bojangles

+0

@JamWaffles:我編輯了這個問題。我有可拖動和可拖動的元素。我想通過編寫JavaScript代碼來觸發拖放這些元素而不使用鼠標。 – Randomblue

回答

2

你必須記住,jQuery.trigger不會觸發HTML事件,即調用.click不會導致鏈接被跟蹤。它只觸發jQuery設置的事件。

http://jupiterjs.com/news/syn-a-standalone-synthetic-event-library是一個真正模仿HTML事件的庫。這是非常容易使用

下斷言,「你好」已經從頁面移除:

Syn.click({},'hello') 
    .type('Hello World') 
    .delay()   //waits 600ms seconds by default 
    .drag($('#trash') , function() { 
    ok($('#hello').length == 0, "removed hello") 
}); 
0

我通常使用jquery.ui複雜的事情拖墜: http://jqueryui.com/demos/draggable/

+0

我不認爲這回答我的問題。我有已經*可拖動和可拖放的元素。我想觸發'drag'和'drop'事件,而不用手動操作(用鼠標)。 – Randomblue

+0

@Randomblue您是使用jQuery UI還是其他插件?無論如何,應該有回調函數和相關文檔。如果沒有,你可以自己擴展/修補插件(如果它在Github之類的話),或者使用不同的插件。 – Bojangles

+0

也許你是在模仿動畫元素到另一個動畫之後的動畫?如果是的話,這與用戶交互有什麼關係? –

1

如果你使用的UI則有要事在拖動行爲dragstartdragdragstop。你應該可以像使用其他事件一樣使用jQuery.trigger()來編程調用這些程序,但是你需要手動操作event實例,不管怎麼樣,我都會認爲手動輸入你想要項目被放置的座標,並且我不確定那會怎麼樣工作還是爲什麼你會想要這樣做。

+1

我正在嘗試編寫UI測試。 – Randomblue

+0

啊......現在這一切都有道理 - 你應該補充說,這是針對你的問題的UI測試:-)你使用了什麼樣的測試框架? – prodigitalson

+1

我使用Selenium WebDriver,但它有拖放的缺點。 – Randomblue