16.12.2009, 17:19
|
Аспирант
|
|
Регистрация: 20.11.2009
Сообщений: 33
|
|
Контекстное меню как считать данные из таблицы
Ребята помогите понять след. проблему, Есть таблица с данными Есть фунцкцИИ которые считывает эти данные при двойном клике по определенной ячейке, Затем я хочу либо заполнить эту ячейку(ту по которой кликал), либо редактировать данные в ней либо полностьсю удалить. Все три функции по отдельности работают правилььно.
То есть было так для обновления данных
$("td").live("dblclick",OPEN_DIALOG_UPDATE_PAIR) ;
и затем:
var a = new Array ();
function OPEN_DIALOG_UPDATE_PAIR()
{ a[0]=$(this).find("#idpair").text();
a[1]=$(this).find("#date").text();
и тд. затем функционал обноления
Все работало все читалось.
Проблема - решил поместить эти функции в контекстное меню(правая клавиша) соотвественно с пунктами Добавить Редактировать Удалить, Плагин поддисан на правый клик по ячейке Теперь когда клацаю по нужной ячейке выпадает меню затем вызывается нужная функция но алерты показывают пустые значения. то есть это a[0]=$(this).find("#idpair").text();
a[1]=$(this).find("#date").text(); Не работает
То есть теперь на клик по ячейке работает выпадение контекстного меню. А как же взять данные из ячейки? Не могу вкурить суть.Я же второй раз клацаю уже по пункту меню.Оно понятно не знает ни про какую ячейку и ничего не читает просто вызывает функцию а там все a[0]=$(this).find("#idpair").text();
a[1]=$(this).find("#date").text(); пустые
как повесить считывание на клацание по пункту меню или может нужно читать и сохранять одновременно. Но для разных функций нужно разное колво данных из ячейки Сейчас у меня так
$("td").contextMenu('myMenu1', {
bindings: {
'add': function(t) {
OPEN_DIALOG_UPDATE_PAIR(t);
},
'edit': function(t) {
alert('Trigger was '+t.id+'\nAction was edit');
},
'delete': function(t) {
alert('Trigger was '+t.id+'\nAction was delete');
}
}
});
Спасибо за вашу помощь.
|
|
16.12.2009, 20:17
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Пожалуйста, отформатируйте свой код!
Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]
О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
|
|
16.12.2009, 21:29
|
Аспирант
|
|
Регистрация: 20.11.2009
Сообщений: 33
|
|
Форматирую . Значит так есть HTML
1) меню
<div class="contextMenu" id="myMenu1">
<ul>
<li id="add">Добавить</li>
<li id="edit">Редактировать</li>
<li id="delete">Удалить</li>
</ul>
</div>
2) На него я вещаю такой JS
$("td").contextMenu('myMenu1', {
bindings: {
'add': function(t) {
OPEN_DIALOG_UPDATE_PAIR(t);
},
'edit': function(t) {
alert('Trigger was '+t.id+'\nAction was edit');
},
'delete': function(t) {
alert('Trigger was '+t.id+'\nAction was delete');
}
}
});
Cама по себе функция OPEN_DIALOG_UPDATE_PAIR(); выполняЛА вытягивание информации из ячеек таблицы при двойном клике по ней левой клавишей мышки то есть раньше она вызывалась НЕ путем выбора пунта меню а вот так
$("td").live("dblclick",OPEN_DIALOG_UPDATE_PAIR) ;
и она читала содержимое выбранной (двойным щелчком левой клавиши ) ячейки таким образом
var a = new Array ();
function OPEN_DIALOG_UPDATE_PAIR()
{
a[0]=$(this).find("#idpair").text();
a[1]=$(this).find("#date").text();
и тд. затем много функционала
}
В ячейках таблицы есть скрытые айдишники хранящие инфу
Сейчас я поместил ее (функцию OPEN_DIALOG_UPDATE_PAIR() ) в пункт меню но ...хочу чтобы она продолжала при выборе пункта меню
<li id="add">Добавить</li>
читать инфу из ячейки на которой была нажата правая клавиша. Но инфы нет.Алерты которые я ставлю при вхождении в функцию пустые.
То есть я понимаю что сперва я нажимаю на ячейке правой кнопкой мыши и выпадает меню я выбираю нужный пункт и вызывается нужная функция которая уже не может считать данные из ячейки потому что она не знает из какой? Или я неправильно понимаю?
|
|
16.12.2009, 21:41
|
|
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
Цитата:
|
Форматирую . Значит так есть HTML
1) меню
<div class="contextMenu" id="myMenu1">
<ul>
<li id="add">Добавить</li>
<li id="edit">Редактировать</li>
<li id="delete">Удалить</li>
</ul>
</div>
2) На него я вещаю такой JS
$("td").contextMenu('myMenu1', {
bindings: {
'add': function(t) { OPEN_DIALOG_UPDATE_PAIR(t); },
'edit': function(t) { alert('Trigger was '+t.id+'\nAction was edit'); },
'delete': function(t) { alert('Trigger was '+t.id+'\nAction was delete'); }
}
});
Cама по себе функция OPEN_DIALOG_UPDATE_PAIR(); выполняЛА вытягивание информации из ячеек таблицы при двойном клике по ней левой клавишей мышки то есть раньше она вызывалась НЕ путем выбора пунта меню а вот так
$("td").live("dblclick",OPEN_DIALOG_UPDATE_PAIR) ;
и она читала содержимое выбранной (двойным щелчком левой клавиши ) ячейки таким образом
var a = new Array ();
function OPEN_DIALOG_UPDATE_PAIR(){
a[0]=$(this).find("#idpair").text();
a[1]=$(this).find("#date").text();
и тд. затем много функционала
}
В ячейках таблицы есть скрытые айдишники хранящие инфу
Сейчас я поместил ее (функцию OPEN_DIALOG_UPDATE_PAIR() ) в пункт меню но ...хочу чтобы она продолжала при выборе пункта меню
<li id="add">Добавить</li>
читать инфу из ячейки на которой была нажата правая клавиша. Но инфы нет.Алерты которые я ставлю при вхождении в функцию пустые.
То есть я понимаю что сперва я нажимаю на ячейке правой кнопкой мыши и выпадает меню я выбираю нужный пункт и вызывается нужная функция которая уже не может считать данные из ячейки потому что она не знает из какой? Или я неправильно понимаю?
|
П.С. Так легче читать
Последний раз редактировалось PeaceCoder, 16.12.2009 в 21:43.
|
|
16.12.2009, 21:50
|
Аспирант
|
|
Регистрация: 20.11.2009
Сообщений: 33
|
|
PeaceCoder Спасибо за помощь в форматировании. Эх еще бы проблему решить. Очень нааадо!
|
|
16.12.2009, 21:57
|
|
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
блин что так сложно мануал почитать. я хоть jQuery не юзаю но почемуто понял.
http://www.trendskitchens.co.nz/jquery/contextmenu/
попробуй так
$("td").contextMenu('myMenu1', {
bindings: {
'add': function(t) { OPEN_DIALOG_UPDATE_PAIR.call(t); },
'edit': function(t) { alert('Trigger was '+t.id+'\nAction was edit'); },
'delete': function(t) { alert('Trigger was '+t.id+'\nAction was delete'); }
}
});
|
|
16.12.2009, 22:15
|
Аспирант
|
|
Регистрация: 20.11.2009
Сообщений: 33
|
|
Cпасибо огромное PeaceCoder заработало. Выручил. Да я тоже в этом деле новичок Если честно раньше читал про этот сall но так и не понял. Это что за метод такой? Если можешь в двух словах. Почему без него никак а с ним как, Объясни я теперь точно пойму. Плииииз.
|
|
16.12.2009, 22:32
|
|
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
http://javascript.ru/Function/call
В двух словах: ИмяФункции.call($t,a1,a2,a3,...)
Вызовется функция в которой this=$t и передадуться аргументы a1,a2,a3,...
В твоем случае this=TD должно быть вот я подправил передачу TD под твою функцию
Последний раз редактировалось PeaceCoder, 16.12.2009 в 22:37.
|
|
16.12.2009, 22:49
|
Аспирант
|
|
Регистрация: 20.11.2009
Сообщений: 33
|
|
Еще раз спасибо Теперь понятней. Извини за наглость (курсовая горит )А еще такой вопрос не подскажешь. У меня эта таблица на ячейки которой подписано меню каждый раз после выполнения функции возвращается из аджакс запроса обновленная И понятно меню исчезает Прописывать каждый раз контекстное меню в succes не вариант. Я раньше с live все делал но сейчас сходу не могу понять на click не повесить livom а как еще можно. Извини еще раз что беспокою но очень надо.
|
|
16.12.2009, 23:06
|
|
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
в твоем случае плагин маломощный. но можно выкрутится след образом.
Повесить контекстное меню на таблицу.
$("table#id").contextMenu('myMenu1', {
bindings: {
'add': function(t) { OPEN_DIALOG_UPDATE_PAIR.call(t._td); },
'edit': function(t) { alert('Trigger was '+t._td.id+'\nAction was edit'); },
'delete': function(t) { alert('Trigger was '+t._td.id+'\nAction was delete'); }
}
onContextMenu: function(e){
e.target.parentNode.parentNode._td = e.target;
return true;
}
});
это при условии, что сама таблица не пересоздается и кроссбраузерное решение под e.target
|
|
|
|