2014-03-06 44 views
1

我正在開發一個項目。所以我在這裏做的是,在jsPlumb中,我在屏幕上動態加載DIV元素,並且當我試圖建立任何2個元素之間的連接時,連接事件觸發的次數與動態加載的DIV元素的數量屏幕,而我只想觸發一次。jsPlumb連接事件觸發不止一次

這裏是我的上述描述代碼:

$('#container').dblclick(function(e) { 
var newState = $('<div>').attr('id', 'state' + i).addClass('item'); 

var title = $('<div>').addClass('title').text('State ' + i); 
var connect = $('<div>').addClass('connect'); 

newState.css({ 
    'top': e.pageY, 
    'left': e.pageX 
}); 

jsPlumb.makeTarget(newState, { 
    anchor: 'Continuous' 
}); 

jsPlumb.makeSource(connect, { 
    parent: newState, 
    anchor: 'Continuous' 
}); 

newState.append(title); 
newState.append(connect); 

$('#container').append(newState); 

jsPlumb.draggable(newState, { 
    containment: 'parent' 
}); 

jsPlumb.bind("connection", function (info, originalEvent) { 

     alert(info.sourceId); 
}); 
i++; 

jsPlumb.bind()事件連接被觸發一次以上。

回答

1

我有一個類似的問題,並能夠通過在設置每個可拖動div元素的循環之前和之外移動jsPlumb.bind偵聽器來解決它。 例如,我有一個configureTool函數被調用每一個div元素我想要拖動:

$('.display > .draggableTool').each(function(idx) { 
    configureTool($(this)); 
} 

在configureTool功能我設置了jsPlumb元素:

function configureTool($el) { 
    /* initialize jsPlumb draggable elements */ 
    jsPlumb.draggable($el, { 
     containment:"parent" 
    }); 

    /* set up source and give it parameters to work with */ 
    jsPlumb.makeSource($el, { 
     /* parameters.... */ 
     } 
    }); 

    /* initialise all elements with '.draggableTool' class as connection targets */ 
    jsPlumb.makeTarget($el, { 
     anchor:"Continuous" 
    }); 

    /* move jsPlumb.bind("connection", function()) before configureTool loop */ 
} 

通過移動在調用configureTool函數的循環之前的連接監聽器,我能夠修復額外的事件觸發器。 所以它結束了看起來像這樣:

jsPlumb.bind("connection", function(info, originalEvent) { 
    alert(info.sourceId); 
}); 

$('.display > .draggableTool').each(function(idx) { 
    configureTool($(this)); 
}); 

希望我理解你的問題,這是有一定的幫助。

0

是添加

 instance.bind("connection", function(info) { 

      alert(info.sourceId); 

     }); 

環路的外面是解決方案。