【问题标题】:How to drag and drop into an html unordered list如何拖放到html无序列表中
【发布时间】:2014-02-19 22:38:41
【问题描述】:

我想允许拖放到 html 无序列表中。我找到的解决方案在这里描述:http://www.w3schools.com/html/tryit.asp?filename=tryhtml5_draganddrop2

但似乎我需要为列表中的每个元素 (li) 赋予一个 id,是否可以在不使用 id 的情况下进行拖放?

在这个解决方案中,我似乎可以将一个 li 拖到另一个解决方案中,我该如何防止这种情况发生?

这是我现在拥有的示例(javascript):

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

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

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

[编辑] 这是html ul:

<ul id="members-list" ondragover="allowDrop(event)" 
    ondrop="drop(event)">
  <li id="drag1" class="group-member" 
      ondragstart="drag(event)" 
      draggable="true">
      <a href="">
        <img class="member-photo" 
             src="images/a.jpg" 
             alt="Bernardo Figueiredo"/>
        <div class="member-info">
          <p>bla</p>
          <p>blabla</p>
        </div>
      </a>
  </li>
  <!-- Other li -->
</ul>

【问题讨论】:

  • 非常感谢(不考虑那个)。

标签: javascript html


【解决方案1】:

您可以使用全局变量,将其保存到 drag() 中的该变量中,然后在 drop() 中访问它

var elem;

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

function drag(ev) {
    ev.dataTransfer.setData("Text", ev.target.id);
    elem = ev.target;
}

function drop(ev) {
    ev.preventDefault();
    var data = ev.dataTransfer.getData("Text");
    ev.target.appendChild(elem);
}    

Demo

【讨论】:

  • 谢谢!顺便问一下,我怎样才能防止在列表的其他 li 中拖放?
  • @LuisAlves 从标签中移除 ondrop 事件。 Demo
  • 是的,但我只有 ul 标签上的 ondrop 事件。 (我用 html 部分重新编辑了我的帖子)
  • @LuisAlves 可以删除多少区域?这些区域是如何确定的?
  • 我认为这不会真正达到我想要的效果。我有一个列表,我希望能够通过拖放来更改元素的顺序。真的需要设置这个区域吗?
猜你喜欢
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 2012-05-08
  • 2010-09-10
  • 1970-01-01
  • 2016-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多