在Javascript中使用命名空间时,dataTransfer为null

时间:2015-11-21 05:08:22

标签: javascript html5 javascript-events drag-and-drop

我在 <td class="ssFont border5Color"> <input type=text name="<%# DataBinder.Eval(Container.DataItem, "MENU_CODE")%>" value="<%# DataBinder.Eval(Container.DataItem, "Description")%>" readonly> <%# DataBinder.Eval(Container.DataItem, "Description")%></td> 写了一些函数。为了防止名称冲突,我决定将它们放入命名空间。在我看来一切正常,但Javascript事件现在没有drop对象。原始代码如下:

dataTransfer

将其放入命名空间后:

var dropBox;

function init(){        
    dropBox = $('#img-container');

    dropBox.bind({
        dragenter: function() {
            $(this).addClass('highlighted');
            return false;
        },
        dragover: function() {
            return false;
        },
        dragleave: function() {
            $(this).removeClass('highlighted');
            return false;
        },
        drop: function(e) {
            var dt = e.originalEvent.dataTransfer; //IT IS NOT NULL          
            displayFiles(dt.files);
            $(this).removeClass('highlighted');
            return false;
        }           
    });

    showDragDropText(true);

    if(window.FileReader == null) alert('Your browser doesn\'t support File API!');     
}

我做错了什么?

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。我必须在我的命名空间中绑定drop事件,如下所示:

    dropBox.bind("dragenter.mynamespace",function(){
        $(this).addClass('highlighted');
        return false;
    });
    dropBox.bind("dragover.mynamespace",function(){
        return false;
    });
    dropBox.bind("dragleave.mynamespace",function(){
        $(this).removeClass('highlighted');
        return false;
    });
    dropBox.bind("drop.mynamespace",function(e){
        var dt = e.originalEvent.dataTransfer;                      
        mynamespace.displayFiles(dt.files);
        $(this).removeClass('highlighted');             
        return false;
    });

现在它完美无缺!