2013-08-26 3 views
3

Что я хочу сделать здесь, это захватить идентификатор каждой строки, на которую щелкнет пользователь. Таким образом, если пользователь щелкает правой кнопкой мыши по строке с id = 22, мне нужно записать «22». Я новичок в JQuery.Получить идентификатор строки таблицы html после правого щелчка

Вот то, что я до сих пор:

$("tr").mousedown(function(event) { 
    if (event.which === 3) { 
     alert($(this).attr("id")); 
    } 
    }); 

Это не дает мне ничего назад, хотя. Каждый <tr> имеет прикрепленный к нему идентификатор. Как получить вопрос.

EDIT:

Даже используя 'тр', я не в состоянии обнаружить MouseDown событие по какой-то причине.

+3

Убедитесь, что вы привязываете обработчик после того, как документ готов. Замечание: [вы можете ** всегда ** использовать 'this.id' вместо' $ (this) .attr ("id") '.] (Http: // stackoverflow.com/q/4651923/139010) –

+0

Можете ли вы привести образец своей страницы в JSFiddle. –

+0

Я думаю, у меня может быть другая проблема, потому что я даже не обнаружил событие mousedown. Я могу добраться до '# tbl1 tbody', но это конец. Если я добавлю 'tr', я не получу событие. – NaN

ответ

1

Я думаю DataTables связывает после DOM готова, так что вам, возможно, придется сделать:

$(function() { 
    $('#tbl1').on('contextmenu', 'tr', function(e) { 
     e.preventDefault(); 
     alert(this.id); 
    }); 
}); 

, если это все еще не работает, попробуйте более исчерпывающий тест:

$(function() { 
    $('body').on('contextmenu', 'tr', function(e) { 
     e.preventDefault(); 
     alert(this.id); 
    }); 
}); 

Вы можете использовать .on() с указанными параметрами, чтобы вы могли прикрепить прослушиватель событий к известному элементу времени готовности дома.

Первый свяжет слушателя событий с #tbl1, в то время как последний присоединяет прослушиватель событий к body. Поэтому при каждом нажатии правой кнопки мыши на что-либо внутри тела будет проверяться, является ли элемент tr и будет срабатывать. Поскольку событие привязано к body (и оно, скорее всего, не изменится при использовании приложения), скорее всего, будет работать, но оно будет слишком шире, так что это лучше (потому что предотвращает бесполезные проверки), если вы ограничиваете table или div, что он является родителем данных, в зависимости от того, как datatables управляет DOM.

+0

Спасибо Барту. Я сейчас попробую это сделать. – NaN

+0

Барт, что работал! – NaN

0

Ваш пример работает для меня без каких-либо проблем. http://jsfiddle.net/YzR47/

$(document).ready(function() { 
    $("#tbl1 tbody tr").mousedown(function(event) { 
     if (event.which === 3) { 
      alert($(this).attr("id")); 
     } 
     }); 
}); 
+0

Привет Энтони. Я только заметил, что я не получаю обнаруженное событие mousedown. Знаете ли вы, почему это так? – NaN

+0

Я пробовал твою скрипку и не работает для меня ... Почему ?! –

+0

Как уже упоминалось ранее, вы уверены, что ваш 'tr' фактически существует в то время, когда вы прикрепляете ручку mousedown? – Jordan

1

Хорошо, основываясь на том, что вы спросили на комментарий моего предыдущего ответа, вы должны изменить свой вопрос, чтобы соответствовать, что вы хотите. Вы ищете RIGHT-CLICK mouse id show.

Это должно работать:

$("#tbl1 tbody tr").bind("contextmenu",function(e) { 
    e.preventDefault(); 
    alert($(this).attr('id')); 
}); 

И это обновленный скрипку: Fiddle

1

DEMO HERE

Основываясь на деталях, которые Вы дали в комментариях, вы хотите, когда вы щелкните правой кнопкой мыши на каждая строка, предупреждение показывает идентификатор элемента tr, нажатого:

Попробуйте это:

$('#tbl1 tbody tr').mousedown(function(e){ 

    if(e.button==2) alert($(this).attr('id')); 

}); 
+0

вы можете. Наслаждайтесь кодированием –

Смежные вопросы