javascript - AngularJS 指令中不调用 Drop 事件

标签 javascript angularjs

我有一个关于将事件放入 AngularJS 指令的奇怪问题。添加监听器是因为控制台根据 DOM 元素显示 - <td class="ng-isolate-scope" droppable="" colspan="2"> .当我更改为其他事件时 - 例如单击一切正常。 这是我的 html 代码:

<div ng-app="app">
    <div ng-controller="testCtrl">
        <table id="testtable">
            <tr>
                <td colspan="2" droppable>
                    <a data-ng-repeat="firstLink in first" href="#">
                        {{firstLink.text}}
                    </a>
                </td>
            </tr>
            <tr>
                <td>
                    <a data-ng-repeat="secondLink in second" href="#" draggable>
                        {{secondLink.text}}
                    </a>
                </td>    
                <td>
                    <a data-ng-repeat="thirdLink in third" href="#" draggable>
                        {{thirdLink.text}}
                    </a>
                </td>    
            </tr>
        </table>
    </div>
</div> 

这是我的 JavaScript:

var app = angular.module('app', []);

app.controller('testCtrl', function ($scope) {
    $scope.first = [
        {text: 1},
        {text: 2},
        {text: 3}
    ];

    $scope.second = [
        {text: 4},
        {text: 5},
        {text: 6}
    ];

    $scope.third =  [
        {text: 7},
        {text: 8},
        {text: 9}        
    ];
});

app.directive('draggable', function () {
    return function(scope, element) {
        // this gives us the native JS object
        var el = element[0];

        el.draggable = true;

        el.addEventListener(
            'dragstart',
            function(e) {
                console.log('dragstart called');
                e.dataTransfer.effectAllowed = 'move';
                e.dataTransfer.setData('Text', 'test test test');
                return false;
            },
            false
        );

        el.addEventListener(
            'dragend',
            function(e) {
                console.log('dragend called');
                e.preventDefault();
                return false;
            },
            false
        );
    }
});


app.directive('droppable', function () {
    return {
        scope: {
            drop: '&' // parent
        },
        link: function(scope, element) {
            var el = element[0];
            console.log(el);
            el.addEventListener(
                'drop',
                function(e) {
                    console.log('Why im not called?');
                    return false;
                },
                false
            );
        }
    }
});

这是 jsFiddle: http://jsfiddle.net/zono/kyFT8/

是什么导致了这种行为?

最好的问候。

最佳答案

我找到了解决方案。来自 dotoro 网络引用:

默认情况下,拖动操作的目标可以是可编辑元素(textarea、input:text、input:password、input:search)、内容可编辑模式下的元素、设计模式下的文档或其他应用。如果您希望在拖动操作期间允许其他元素成为放置目标,请同时取消 ondragenter 和 ondragover 事件。

所以这是工作的jsfiddle:

http://fiddle.jshell.net/kyFT8/11/

关于javascript - AngularJS 指令中不调用 Drop 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24204732/

相关文章:

javascript - parseInt 复制 JavaScript 中的对象属性

javascript - AngularJS ng-click 工作

javascript - Angular 击键观察器未正确更新范围

javascript - Angular js中从html页面http.get()数据传递参数的语法错误

javascript - 更改选择的背景颜色悬停

javascript - 如何增加所见即所得编辑器的高度?

javascript - 如何在执行 Promise 时停止 $ionicLoading?

javascript - 如何在 Onsen UI 中从一个页面导航到另一个页面

javascript - 如何在点击时切换全屏

javascript - 使用鼠标位置更改 D3 map 工具提示的类别