2014-01-08 7 views
0

Я сделал функцию обмена двумя фонами div с помощью перетаскивания. Он хорошо работает в Chrome, но если я использую его в IE, он падает.Работа с перетаскиванием JavaScript в Chrome, но не в IE

Вот HTML часть:

<div class="slot" id="slot1" draggable="true" ondragstart="onDragStart(event,0)" ondragenter="onDragEnter(event,0)" ondragover="onDragOver(event)" ondrop="onDrop(event,0)" onclick="removecard(0)"></div> 
<div class="slot" id="slot2" draggable="true" ondragstart="onDragStart(event,1)" ondragenter="onDragEnter(event,1)" ondragover="onDragOver(event)" ondrop="onDrop(event,1)" onclick="removecard(1)"></div> 
<div class="slot" id="slot3" draggable="true" ondragstart="onDragStart(event,2)" ondragenter="onDragEnter(event,2)" ondragover="onDragOver(event)" ondrop="onDrop(event,2)" onclick="removecard(2)"></div> 

Вот часть JavaScript:

function onDragStart(ev,a){ 
    ev.dataTransfer.setData("DraggingIndex",a); 
} 

function onDragEnter(ev,a){ 
    ev.preventDefault(); 
} 

function onDragOver(ev){ 
    ev.preventDefault(); 
} 

function onDrop(ev,b){ 
    var a = ev.dataTransfer.getData("DraggingIndex"); 
    slotchange(a,b); 
      deckexpression(deck); 
} 

Он работал хорошо в Chrome, но в IE, он не работает. Я думаю, что в IE функция onDragStart или onDrop не могла обрабатывать два параметра. Моя цель - использовать slotchange (a, b), где a и b - индексы двух слотов.

Пожалуйста, научите меня, как решить проблему в IE. Благодарю.

+2

IE версии .... – War10ck

+0

Что делает ли изменение слота, выполняет ли он операцию AJAX? – WheretheresaWill

+0

@WheretheresaWill Нет, это просто еще одна функция JavaScript, обменивающая соответствующие данные, относящиеся к двум блокам. – fiverules

ответ

0

Какую версию IE вы используете? Internet Explorer 9+ поддерживает перетаскивание.

Вот образец onDragStart и OnDrop, имеющих 2 параметров, работающих на IE:

HTML:

<div id="div1" ondrop="drop(event, 1)" ondragover="allowDrop(event)"></div> 
<div class='slot' id="drag1" draggable="true" ondragstart="drag(event, 2)" width="336" height="69"> </div> 

JS:

function allowDrop(ev) { 
    ev.preventDefault(); 
} 

function drag(ev, secondParam) { 
    ev.dataTransfer.setData("Text", ev.target.id); 
    console.log(secondParam); 
} 

function drop(ev, secondParam) { 
    ev.preventDefault(); 
    var data = ev.dataTransfer.getData("Text"); 
    ev.target.appendChild(document.getElementById(data)); 
    console.log(secondParam) 
} 

JSFiddle: http://jsfiddle.net/amontellano/8twY6/

+0

Моя версия IE была 11, но я попробую. Спасибо. – fiverules

+0

То, что я хочу, это преобразовать информацию о втором канале сопротивления (ev). Как я могу это сделать? – fiverules

+0

Что вы имеете в виду, когда упоминаете «КОНВЕРТ»? Считайте, что вы обрабатываете индексы чисел (например, 0,1,2) для secondParam, а имя (id) ваших HTML-элементов использует префикс «slot». Возможно, вы можете получить свои элементы с помощью var elem = document.getElementById («slot» + param); –

0

Кажется, что IE поддерживает только настройку «Текст», и "URL".

http://msdn.microsoft.com/en-us/library/ie/ms536744(v=vs.85).aspx

Мой обходной путь для установки нескольких значений был:

var data = { 
    id: ev.target.id, 
    dragIndex: index 
}; 
ev.dataTransfer.setData("Text", JSON.stringify(data)); 

Тогда вам придется разобрать его при падении:

var data = JSON.parse(ev.dataTransfer.getData("Text")); 
console.log(data.id); 
console.log(data.dragIndex); 
+0

Еще одна вещь, которую я заметил, это то, что если я добавлю слушателя к «ondragenter», событие не предоставит данные. ev.dataTransfer.getData («Текст») - это пустая строка, где, поскольку другие браузеры предоставляют тот же объект, что и при отбрасывании :( –

Смежные вопросы