JQuery контекстное меню получить элемент нажал - PullRequest
3 голосов
/ 18 января 2011

Я использую плагин контекстного меню jQuery Криса Домигана для применения контекстного меню. Вот как я это делаю:

$('#contacts tbody tr').contextMenu('myMenu1', {
    bindings: {
        'copy': function(t) {
             alert('Trigger was '+t.id+'\nAction was Copy');
         },

        'delete': function(t) {
             alert('Trigger was '+t.id+'\nAction was Delete');
        }
    },             
});

У меня вопрос, как мне получить содержимое выбранного элемента? Я пробовал с

$(t.target).html()

но возвращается null. Есть идеи?

РЕДАКТИРОВАТЬ: вот пример http://jsfiddle.net/gqhRV/

Ответы [ 2 ]

9 голосов
/ 01 февраля 2013

Я думаю, это то, что вы хотите:

<script type="text/javascript"> 
$(function(){
$.contextMenu({
    selector: '.flexme1 tbody tr', 
    callback: function(key, options) {
        alert("Clicked on " + key + " on element " + options.$trigger.attr('id').substr(3));            
    },
    items: {
        "edit": {name: "Edit", icon: "edit"},
        "cut": {name: "Cut", icon: "cut"},
        "copy": {name: "Copy", icon: "copy"},
        "paste": {name: "Paste", icon: "paste"},
        "delete": {name: "Delete", icon: "delete"},
        "sep1": "---------",
        "quit": {name: "Quit", icon: "quit"}
    }
});

$('.flexme1 tbody tr').on('click', function(e){
    console.log('clicked', this);
})
});
</script>

Он интегрирован с Flexigrid ... отлично работает для меня ...

И, очевидно, у меня есть несколько дополнительных опций.

7 голосов
/ 18 января 2011

не знаком с плагином, но, судя по всему, вы сможете написать:

$("#" + t.id).html();

, но в случае большинства плагинов jQuery вы сможете это сделать:

$(this).html();

из контекста 'copy': function(t) { и 'delete': function(t) {


$('#contacts tbody tr').contextMenu('myMenu1', {
    bindings: {
        'open': function(t) { ShowAction(t, "Open"); },
        'email': function(t) { ShowAction(t, "Email"); },
        'save': function(t) { ShowAction(t, "Save"); },
        'delete': function(t) { ShowAction(t, "Delete"); }
    }
});

function ShowAction(t, a) {
    alert('Trigger was ' + t.id + '\nAction was ' + a + "\nHtml is " + $(t).html());
}

Вот рабочий пример: http://jsfiddle.net/dNUgg/

Я предполагаю, что выТеги <tr> не имеют атрибута id


Даже если <tr> не имеет идентификатора, это все равно работает: http://jsfiddle.net/dNUgg/1/


 alert('content is ' + $(t).text() + '\nAction was Delete');

обновил ваш jsfiddle: http://jsfiddle.net/gqhRV/1/

вы делали $(t.target).text(), когда вы должны делать $(t).text()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...