jQuery UI & Droppable: Prevent Propagation

This entry is part 5 of 7 in the series jQuery UI Droppable

jQuery UI Droppable – Prevent propagation

When working with nested droppables — for example, you may have an editable directory structure displayed as a tree, with folder and document nodes — the greedy option set to true prevents event propagation when a draggable is dropped on a child node (droppable).

<!doctype html>
<html lang='en'>
<head>
    <meta charset='utf-8'>
    <title>jQuery UI Droppable - Prevent propagation</title>
    <link rel='stylesheet' href='//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css'>
    <script src='//code.jquery.com/jquery-1.9.1.js'></script>
    <script src='//code.jquery.com/ui/1.10.4/jquery-ui.js'></script>
    <link rel='stylesheet' href='http://codecrawl.com/code/jqueryui/jqueryui_style.css'>
    <style>
        #draggable {
            width: 100px;
            height: 50px;
            padding: 0.5em;
            float: left;
            margin: 10px 10px 10px 0;
        }

        #droppable, #droppable2 {
            width: 300px;
            height: 160px;
            padding: 0.5em;
            float: left;
            margin: 10px;
        }

        #droppable-inner, #droppable2-inner {
            width: 170px;
            height: 60px;
            padding: 0.5em;
            float: left;
            margin: 10px;
        }
    </style>
    <script>
        $(function () {
            $('#draggable').draggable();

            $('#droppable, #droppable-inner').droppable({
                activeClass: 'ui-state-hover',
                hoverClass: 'ui-state-active',
                drop: function (event, ui) {
                    $(this)
                            .addClass('ui-state-highlight')
                            .find('> p')
                            .html('Dropped!');
                    return false;
                }
            });

            $('#droppable2, #droppable2-inner').droppable({
                greedy: true,
                activeClass: 'ui-state-hover',
                hoverClass: 'ui-state-active',
                drop: function (event, ui) {
                    $(this)
                            .addClass('ui-state-highlight')
                            .find('> p')
                            .html('Dropped!');
                }
            });
        });
    </script>
</head>
<body>

<div id='draggable' class='ui-widget-content'>
    <p>Drag me to my target</p>
</div>

<div id='droppable' class='ui-widget-header'>
    <p>Outer droppable</p>

    <div id='droppable-inner' class='ui-widget-header'>
        <p>Inner droppable (not greedy)</p>
    </div>
</div>

<div id='droppable2' class='ui-widget-header'>
    <p>Outer droppable</p>

    <div id='droppable2-inner' class='ui-widget-header'>
        <p>Inner droppable (greedy)</p>
    </div>
</div>

</body>
</html>
Try The Code
Series Navigation<< jQuery UI & Droppable: Shopping Cart Demo
jQuery UI & Droppable: A Simple Photo Manager >>

Leave a comment

Leave a Reply