我有一個可拖動的div
s和可拖放區域的列表。 Drag-n-drop在Chrome,FF和IE9中使用鼠標工作正常。我想添加鍵盤交互。jquery-ui - 取消拖動轉義鍵
拖動div
應該回復到列表使用時按esc
鍵。所以,首先我不喜歡這樣的:
$(document).keyup(function(e){
e.preventDefault();
console.log(':::keypress:::',e);
if(e.which=== 27 || e.keyCode === 27){
$('.ui-draggable-dragging').draggable('option', 'revert', 'invalid').trigger('mouseup');
}
});
上面的代碼檢測esc
按鍵,但div
下降,如果它是在可投放區域。它不會在esc
按鍵上恢復。所以我喜歡這個從here
$(document).keyup(function(e){
//e.preventDefault();
var mouseMoveEvent, offScreen=-50000;
console.log(':::event:::',e);
if(e.which=== 27 || e.keyCode === 27) {
console.log(':::into esc keyup:::');
mouseMoveEvent = document.createEvent("MouseEvent");
offScreen = -50000;
mouseMoveEvent.initMouseEvent(
"mousemove", //event type : click, mousedown, mouseup, mouseover, etc.
true, //canBubble
true, //cancelable
window, //event's AbstractView : should be window
1, // detail : Event's mouse click count
offScreen, // screenX
offScreen, // screenY
offScreen, // clientX
offScreen, // clientY
false, // ctrlKey
false, // altKey
false, // shiftKey
false, // metaKey
0, // button : 0 = click, 1 = middle button, 2 = right button
null // relatedTarget : Only used with some event types (e.g. mouseover and mouseout).
// In other cases, pass null.
);
document.dispatchEvent(mouseMoveEvent);
$('.ui-draggable-dragging').draggable('option', 'revert', 'invalid').trigger('mouseup');
//}else{
// if (document.createEventObject){
// mouseMoveEvent = document.createEventObject (document.event);
// document.fireEvent(mouseMoveEvent);
// $('.ui-draggable-dragging').draggable('option', 'revert', 'invalid').trigger('mouseup');
// }
//}
}
});
這在Chorme中正常工作。但是這在IE和FF中不起作用。 即使我嘗試使用document.createEventObject
和document.fireEvent()
。但仍然無法正常工作。
我如何在Chrome,IE和FF恢復拖動div
S於esc
關鍵?????
如果我在'initMouseEvent'從改變relatedTarget' null'到'document',FF給出錯誤'NS_ERROR_ILLEGAL_VALUE'。 – Valay
對此有何更新? – Valay
是否有任何其他替代解決方案來實現此? – Valay