Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Контекстное меню как считать данные из таблицы (https://javascript.ru/forum/jquery/6711-kontekstnoe-menyu-kak-schitat-dannye-iz-tablicy.html)

xela1980 16.12.2009 16:19

Контекстное меню как считать данные из таблицы
 
Ребята помогите понять след. проблему, Есть таблица с данными Есть фунцкцИИ которые считывает эти данные при двойном клике по определенной ячейке, Затем я хочу либо заполнить эту ячейку(ту по которой кликал), либо редактировать данные в ней либо полностьсю удалить. Все три функции по отдельности работают правилььно.
То есть было так для обновления данных

$("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');
}

}
});
Спасибо за вашу помощь.

Gvozd 16.12.2009 19:17

Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

xela1980 16.12.2009 20:29

Форматирую . Значит так есть 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 20:41

Цитата:

Форматирую . Значит так есть 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>


читать инфу из ячейки на которой была нажата правая клавиша. Но инфы нет.Алерты которые я ставлю при вхождении в функцию пустые.
То есть я понимаю что сперва я нажимаю на ячейке правой кнопкой мыши и выпадает меню я выбираю нужный пункт и вызывается нужная функция которая уже не может считать данные из ячейки потому что она не знает из какой? Или я неправильно понимаю?
П.С. Так легче читать

xela1980 16.12.2009 20:50

PeaceCoder Спасибо за помощь в форматировании. :) Эх еще бы проблему решить. Очень нааадо!

PeaceCoder 16.12.2009 20:57

блин что так сложно мануал почитать. я хоть 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'); }
    }
  });

xela1980 16.12.2009 21:15

Cпасибо огромное PeaceCoder заработало. Выручил. Да я тоже в этом деле новичок Если честно раньше читал про этот сall но так и не понял. Это что за метод такой? Если можешь в двух словах. Почему без него никак а с ним как, Объясни я теперь точно пойму. Плииииз.

PeaceCoder 16.12.2009 21:32

http://javascript.ru/Function/call

В двух словах: ИмяФункции.call($t,a1,a2,a3,...)

Вызовется функция в которой this=$t и передадуться аргументы a1,a2,a3,...

В твоем случае this=TD должно быть вот я подправил передачу TD под твою функцию

xela1980 16.12.2009 21:49

Еще раз спасибо Теперь понятней. Извини за наглость (курсовая горит :) )А еще такой вопрос не подскажешь. У меня эта таблица на ячейки которой подписано меню каждый раз после выполнения функции возвращается из аджакс запроса обновленная И понятно меню исчезает Прописывать каждый раз контекстное меню в succes не вариант. Я раньше с live все делал но сейчас сходу не могу понять на click не повесить livom а как еще можно. Извини еще раз что беспокою но очень надо.

PeaceCoder 16.12.2009 22:06

в твоем случае плагин маломощный. но можно выкрутится след образом.
Повесить контекстное меню на таблицу.
$("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


Часовой пояс GMT +3, время: 04:58.