2013-06-12 2 views
1

У меня есть серия вложенных таблиц с табличными данными. Таблицы имеют 3 глубины, поэтому есть главная таблица, которая содержит структуру всего объекта, некоторые промежуточные таблицы, которые содержат разделы главной таблицы, и таблицы данных, содержащие фактические данные.Выбор отдельного элемента в большой таблице при нажатии клавиши jQuery

Идея состоит в том, что когда элемент регистрирует событие ключа, выполняется расчет в строке данных, которая зарегистрировала событие ключа.

Структура таблиц данных примерно следующим образом:

<table id="someDataTable"> 
    <tbody> 
     <tr> 
      <td >Some Title</td> 
      <td >Units</td> 
      <td >Val/Unit</td> 
      <td >Value</td> 
     </tr> 
     <tr> 
      <td><input type="text" size="30" /></td> 
      <td><input type="text" size="14" class="units"/></td> 
      <td><input type="text" size="14" class="value"/></td> 
      <td><input type="text" size="14" readonly="readonly" class=total"/></td> 
     </tr> 
... 
    </tbody> 
</table> 

идентификатор таблицы уникален, конечно.

Грубая идея: 'units * value = total' в любом количестве строк (они динамически генерируются по требованию, но я не думаю, что это имеет значение).

Моя идея, чтобы сделать это было возможно, чтобы захватить все нажатиями в главной таблице с этим:

function initialize() { 
    $(document).on('keypress', '#tblMasterTable', DoMathForRow); 
} 

который затем вызывает на универсальной функции, которые могли бы сделать математику для всех таблиц данных. Идея состояла в том, чтобы использовать «это» в качестве средства идентификации ...

function DoMathForRow() { 

    tKeyedBox = this; 

    //Do Things Here 
} 

В принципе, я надеялся, что «это» вернет окно ввода, который был набран в, так что я мог бы эффективно сказать

tKeyedBox.parent().parent() 

И иметь доступ к точной строке, было событие нажатия клавиши. Оттуда было бы легко сделать все остальное.

Но «это» возвращает всю основную таблицу, что весьма неудачно.

Мой вопрос заключается в следующем: как получить окно ввода (или ячейку или строку - что-то абсолютно идентифицирующее), где произошло событие нажатия клавиши.

Я довольно новичок в jQuery, поэтому я довольно посредственна в структурировании моих утверждений о выборе хорошо, и я чувствую, что это, вероятно, простой вопрос, на который, возможно, ответили в прошлом, но я не мог получить информацию I искал в других вопросах. Спасибо за ваше терпение!

+0

tKeyedBox в вашем коде является глобальной переменной, я вполне уверен, что вы бы хотели использовать локальный: var tKeyedBox = this –

ответ

3

Dig уровень глубже в вашем селекторе, и только зарегистрировать нажатия клавиши, когда он нажал на input

$(document).on('keypress', '#tblMasterTable input[type="text"]', DoMathForRow); 

this теперь будет относиться к вашему input, а не на столе.

+0

Это именно то, что мне нужно. Это сработало красиво! Благодаря! – mkautzm

+0

@mkautzm - Удивительный, рад, что я мог бы помочь! Не забудьте отметить это как принято:) \ – tymeJV