Я новичок в использовании jQuery/javascript и работаю над использованием библиотеки jsPlumb для создания некоторых динамических узлов, где пользователь может щелкнуть по фигуре, и появится новый перетаскиваемый узел.Локальные переменные в javascript/jQuery
Моя проблема заключается в том, что я создаю список через цикл for, а последний элемент, который переименован, присваивается всем другим «щелчкам».
Вот мешающий кусок кода:
var sourceNodes = {
InputFiles:{
cssClass:".data_source",
name:"Input Files1",
options:[{
name:"Input Files1",
connectsFrom:[],
connectsTo:["IF1.1", "IF1.2"],
},
{
name:"Input Files2",
connectsFrom:[],
connectsTo:["IF1.1"],
}]
},
InputFiles2:{
cssClass:".data_source",
name:"Input2.1",
options:[{
name:"Input2.1",
connectsFrom:["Input1"],
connectsTo:["Input2.1"],
},
{
name:"Input2.2",
connectsFrom:["Input1"],
connectsTo:["Input2.2"],
}]
},
InputFiles3:{
cssClass:".data_source",
name:"Input3.1",
options:[{
name:"Input3.1",
connectsFrom:["Input2"],
connectsTo:["Input3.1"],
}]
}
};
for(var m in sourceNodes){
var sourceNode = sourceNodes[m];
var sourceClass = jsPlumb.getSelector(sourceNode.cssClass);
console.log(sourceClass);
sourceClass.bind("click", function(connection){
var selectorClass = sourceNode.cssClass.concat("_window").substring(1);
var toFind = "div[id^='".concat(selectorClass,"']");
var DivIndex = $('#render').find(toFind).length+1;
var DivName = selectorClass.concat(DivIndex);
var Div = $('<div>', { id: DivName },
{ class: selectorClass });
Div.css({
top: connection.clientY,
left: connection.clientX,
});
Div.appendTo('#render');
Div.text(sourceNode.name);
jsPlumb.draggable($(Div));
$(Div).addClass(selectorClass);
_addEndpoints(DivName, ["BottomCenter"], ["TopCenter"]);
var selectOption = $('<select>', { id: DivName });
for(var n=0; n< sourceNode.options.length; n++){
var option = $('<option>', { value: n,
connectsTo: sourceNode.options[n].connectsTo,
connectsFrom: sourceNode.options[n].connectsFrom });
option.text(sourceNode.options[n].name);
$(selectOption).append(option);
}
$(Div).append(selectOption);
});
};
Что происходит каждый элемент wihin sourceNodes что кликали принимают значения в InputFiles3, что последняя запись, которая связана через sourceClass.bind. Любое понимание того, что я здесь отсутствует, и как я могу сделать каждый объект в цикле независимым?
Кроме того, как из JQuery 1.7 .bind() устарел и должен быть заменен на .on() или .delegated() в зависимости от ваших потребностей. см. http://api.jquery.com/on/ для получения дополнительной информации. – Chausser
@chausser superseeded, не устаревший. Там нет спешки с удалением его из существующего кода. И нет, вы не должны использовать делегат. Он был дополнен «на». –
Полезно знать, что .on(), похоже, не привязывается к событиям, добавленным в DOM после загрузки страницы, но это проблема для другого вопроса. – Chausser