Очень сложно назвать эту вещь. Я использую плагин contextMenu для jQuery.Создание динамического массива JSON с обратными вызовами (проблема внутреннего закрытия)
http://joewalnes.com/2011/07/22/a-simple-good-looking-context-menu-for-jquery/
Он может принять массив элементов, так что я могу динамически создавать меню на основе объекта JSON я установил ранее называемые «пакеты» с не более чем массивом объектов JSON, содержащий идентификатор и Заголовок. Например:
var packages = [{id:1,title:"One"},{id:2,title"Two"}];
Как вы могли бы сказать, из примера в ссылке, которую я добавил, «Элемент» состоит из, как минимум, метка и функция обратного вызова (который выполняется при выборе пункта). Так что моя первая мысль была сделать это:
var itemsArr = new Array();
for(var i=0; i<packages.length; i++)
{
itemsArr.push({label:packages[i].title, action:function(){myClickFunction(packages[i].id);}});
}
$("#myMenuThingie").contextPopup({title:"My Popup", items:itemsArr});
Теперь, я проверил, что я могу, Infact передать массив, чтобы сделать эту работу должным образом меню. Проблема, я думаю, является проблемой внутреннего закрытия. Поскольку myClickFunction всегда получает значение последнего идентификатора, независимо от того, что нажимается.
Я нашел статью о «Сразу же запущенной функции Выражения» здесь: http://benalman.com/news/2010/11/immediately-invoked-function-expression/, в результате этой модификации:
for(var i=0; i<packages.length; i++)
{
itemsArr.push({label:packages[i].title, action:(function(tempId){myClickFunction(tempId);})(packages[i].id)});
}
однако, этот метод не будет реально работать либо потому, что он сразу же вызывает эти функции, а не на нажмите кнопку.
Я знаю, что я мог бы попытаться использовать jQuery, чтобы найти все промежутки, сгенерированные выпадающим списком, и применить события кликов таким образом. Мне просто интересно, есть ли способ создать этот массив объектов с обратными вызовами, ссылающимися на правильный идентификатор. Я также буду принимать предложения для других плагинов contextMenu, если это позволяет мне динамически применять элементы аналогичным образом.
Любые мысли?
Это похоже на работу. Интересно. Благодаря! – AceCorban