W3C home > Mailing lists > Public > whatwg@whatwg.org > October 2009

[whatwg] Issue on drag & drop example in specification?

From: Ian Hickson <ian@hixie.ch>
Date: Fri, 23 Oct 2009 00:41:50 +0000 (UTC)
Message-ID: <Pine.LNX.4.62.0910230040160.9145@hixie.dreamhostps.com>
On Wed, 21 Oct 2009, Shumpei Shiraishi wrote:
>
> <!DOCTYPE html>
> <html>
> <head>
> <meta charset="UTF-8">
> <title></title>
> <style type="text/css">
> ul, li {
>  -webkit-user-drag: element;
> }
> </style>
> <script type="text/javascript">
> function onDragStart(event) {
>   if (event.target.tagName.toLowerCase() == "li") {
>     var dt = event.dataTransfer;
>     dt.dropEffect = "copy";
>     dt.setData("listItemId", event.target.id);
>   } else {
>     event.preventDefault();
>   }
>   return true;
> }
> function onDrop(event) {
>   var id = event.dataTransfer.getData("listItemId");
>   var li = document.getElementById(id);
>   if (li && li.parentNode != event.currentTarget) {
>     li.parentNode.removeChild(li);
>     event.currentTarget.appendChild(li);
>   }
>   event.stopPropagation();
> }
> function onDragOver(event) {
>   event.preventDefault();
> }
> function onDragEnter(event) {
>   var types = event.dataTransfer.types;
>   for (var i = 0; i < types.length; i++) {
>     if (types[i] == "listItemId") {
>       // When this code is ommited, drag & drop operation should be canceled.
>       // But it doesn't come to that on Safari4 and FF3.5. Why?
> 
>       // event.preventDefault();
>       return true;
>     }
>   }
> }

Here you want to put the preventDefault() after the for() loop, so that it 
cancels the event only if the type was not found.


> </script>
> </head>
> <body>
> <ul id="list1"
>   ondragstart="onDragStart(event)"
>   ondragenter="onDragEnter(event)"
>   ondragover="onDragOver(event)"
>   ondrop="onDrop(event)">
>   <li id="apple1" draggable="true">APPLE</li>
>   <li id="grape1" draggable="true">GRAPE</li>
>   <li id="orange1" draggable="true">ORANGE</li>
> </ul>
> <ul id="list2"
>   ondragstart="onDragStart(event)"
>   ondragenter="onDragEnter(event)"
>   ondragover="onDragOver(event)"
>   ondrop="onDrop(event)">
>   <li id="apple2" draggable="true">Apple</li>
>   <li id="grape2" draggable="true">Grape</li>
>   <li id="orange2" draggable="true">Orange</li>
> </ul>
> </body>
> </html>

With that modification, your example works for me in Firefox. It crashes 
the Safari build I have, not sure what that's about.

-- 
Ian Hickson               U+1047E                )\._.,--....,'``.    fL
http://ln.hixie.ch/       U+263A                /,   _.. \   _\  ;`._ ,.
Things that are impossible just take longer.   `._.-(,_..'--(,_..'`-.;.'
Received on Thursday, 22 October 2009 17:41:50 UTC

This archive was generated by hypermail 2.4.0 : Wednesday, 22 January 2020 16:59:18 UTC