【问题标题】:JavaScript for drag and drop img not working on Ipad / Iphone用于拖放图像的 JavaScript 在 Ipad / Iphone 上不起作用
【发布时间】:2014-05-19 08:49:37
【问题描述】:

新的难题!我需要让它在 Ipad / Iphone 上工作

Internet Explorer 问题已解决!

改变了 ev.dataTransfer.setData("content",ev.target.id); to ev.dataTransfer.setData("Text",ev.target.id);

我目前正在从事网络教育,其中一部分是拖放查询。 它在 Chrome 和 Firefox 中运行良好,但在资源管理器中无法运行。 我是 JS 的新手,对 MS“标准”差异不太熟悉。 请原谅我的英语不好但不是我的母语。

JS代码:

var i = 0;

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

function drag(ev)
{
  ev.dataTransfer.setData("content",ev.target.id);
}

function drop(ev)
{
  ev.preventDefault();
  var image =ev.dataTransfer.getData("content");

  if (ev.target.id == document.getElementById(image).getAttribute('data-div'))
  { 
    ev.target.appendChild(document.getElementById(image));
    i++;

if(i == 9)
{
    document.getElementById('next').style.display="inline";
}
  }
  else
  {
     alert("Wrong");
  }
}

HTML代码:

<div id="box">
    <div class="drop" id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
    <div class="drop" id="div2" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
    <div class="drop" id="div3" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
    <div class="drop" id="div4" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
    <div class="drop" id="div5" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
    <div class="drop" id="div6" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
    <div class="drop" id="div7" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
    <div class="drop" id="div8" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
    <div class="drop" id="div9" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
</div>

<div id="pic">
    <img class="drag" id="drag1" data-div="div1" src="http://images.stockfreeimages.com/866/sfi/free_8660001.jpg" draggable="true" ondragstart="drag(event)">
    <img class="drag" id="drag2" data-div="div2" src="http://images.stockfreeimages.com/866/sfi/free_8660001.jpg" draggable="true" ondragstart="drag(event)">
    <img class="drag" id="drag3"  data-div="div3" src="http://images.stockfreeimages.com/866/sfi/free_8660001.jpg" draggable="true" ondragstart="drag(event)">
    <img class="drag" id="drag4"  data-div="div4" src="http://images.stockfreeimages.com/866/sfi/free_8660001.jpg" draggable="true" ondragstart="drag(event)">
    <img class="drag" id="drag5"  data-div="div5" src="http://images.stockfreeimages.com/866/sfi/free_8660001.jpg" draggable="true" ondragstart="drag(event)">
    <img class="drag" id="drag6"  data-div="div6" src="http://images.stockfreeimages.com/866/sfi/free_8660001.jpg" draggable="true" ondragstart="drag(event)">
    <img class="drag" id="drag7"  data-div="div7" src="http://images.stockfreeimages.com/866/sfi/free_8660001.jpg" draggable="true" ondragstart="drag(event)">
    <img class="drag" id="drag8"  data-div="div8" src="http://images.stockfreeimages.com/866/sfi/free_8660001.jpg" draggable="true" ondragstart="drag(event)">
    <img class="drag" id="drag9"  data-div="div9" src="http://images.stockfreeimages.com/866/sfi/free_8660001.jpg" draggable="true" ondragstart="drag(event)">
</div>

<div id="next"> 
    <a href="q2.php" target="content"> Nästa </a>
</div>

我在其他一些文件中使用这个 JS 代码来解决资源管理器问题:

var CB = 
{
addEvent : function(element, event, action)
{
    if (element.addEventListener)
    {
        element.addEventListener(event, action, false);
    }
    else
    {
        element.attachEvent("on" + event, action);
    }
}
}

非常感谢您的帮助

//埃米尔

【问题讨论】:

  • 您使用的是哪个版本的 Internet Explorer?使用 IE 开发者工具调试会出现什么错误?
  • 我使用 IE 11 并且在 ev.dataTransfer.setData("content",ev.target.id); 上收到错误消息;
  • 您收到什么错误信息?我指的是出现在失败代码行下方的红底白字消息。
  • 错误消息显示“{exception} 进行了意外调用以获得对方法或属性的访问权限。”

标签: javascript iphone ipad


【解决方案1】:

IE 不通过函数参数发送事件,而是作为window 对象的一部分。因为你调用你的事件参数ev,它并不知道这其实是event

如果你想在 IE 中使用事件,你必须在每个窗口(在你的情况下)的第一行编写以下代码:

ev = ev || window.event;

或者您可以将代码中的每个ev 实例替换为event,因为可以隐式使用window 参数。

来源:http://javascript.info/tutorial/obtaining-event-object

【讨论】:

  • 经过大量谷歌搜索后,我发现了这一点:更改 ev.dataTransfer.setData("content",ev.target.id); to ev.dataTransfer.setData("Text",ev.target.id);
  • 感谢您的宝贵时间,我真的很满意!
猜你喜欢
  • 2014-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-03
  • 1970-01-01
  • 2019-09-26
  • 2012-11-30
相关资源
最近更新 更多