0

我想使用拖放对象的方法。

function Controller(){
        $( "#container" ).droppable({
        drop: function( event, ui ) {
            var draggable = ui.draggable;
            alert( "Dropped:" + draggable.attr('id'));
            draggable.myMethod();

        }

});

你能解释一下为什么这不起作用吗?警报显示正确的对象被丢弃,但我无法使用该方法。

对象如下所示:

function Icon(name) {
var name = name;
this.myMethod = function() {
    alert("test")};
    this.getInfo = function() {  
    var dataname = this.getName();

    //BErtram
    $("#" + dataname).draggable({ revert: "valid" });
    //Bertram Ende


}
}

编辑:

如果我以这种方式调用方法:

            drop: function( event, ui ) {
            var draggable = ui.draggable;
            alert(...);
            var ic = new Icon("asdsa");
            ic.myMethod();
        },

它有效,但我想在拖动的对象上使用方法,我必须进行某种类型转换吗?

编辑:解决方法 最后我使用了一种解决方法,使用 bool 来检查是否有成功的放置,如果 boolean ist 为真,则调用 draggable.stop 中的方法。boolean 的状态在 droppable 中在成功放置时设置为 true,在 draggable.start 中设置为 false。

4

2 回答 2

0

ui.draggable值是包含在 jQuery 对象中的 DOM 元素。您需要一种机制将元素映射回Icon负责它的元素。

最简单的方法是使用.data()

function Icon(name) {
    $('#' + name).data('self', this);
    ...
}

然后在事件处理程序中检索该对象:

drop: function(event, ui) {
    var draggable = ui.draggable;
    var icon = draggable.data('self');
    icon.myMethod();
}
于 2013-03-08T15:04:35.240 回答
0

问题是这是您创建myMethod的对象上的一个函数,但是它不是一个实例- 所以它没有方法。Iconui.draggableIconmyMethod

于 2013-03-08T14:46:59.870 回答