2009-02-22 6 views
0

Итак, я работаю над этим весь день, и я не могу понять, как заставить его работать. У меня есть таблица с TD, заполненная содержимым, которое извлекается из базы данных с помощью команды «getJSON» JQuery. У меня есть настройка обработчика событий, так что при двойном щелчке элемента TD его содержимое становится элементом INPUT со значением по умолчанию, содержащим предыдущее содержимое TD.JQuery: Поиск объекта, создавшего элемент DOM

входного элемента создается внутри объекта Javascript под названием «Input», как так:

var Input = function() { 
    var obj = this; 
    obj.docElement = $('<input/>').attr('type', 'text').val(obj.defaultValue); 
} 

Все это работает до сих пор. Моя проблема заключается в том, что я хочу, чтобы пользователь мог нажать клавишу RETURN, пока выбран INPUT, чтобы показать, что они закончили редактирование этого поля. Я пробовал что-то вроде:

$(obj.docElement).bind('keydown', function(e) { 
    if(e.which == 13) { 
     // do something 
    } 
} 

Это прекрасно работает в первый раз, когда вы редактируете поле; однако, если вы редактируете поле несколько раз, он перестает работать. Также, если вы случайно дважды щелкнете TD, в конце концов он сломается. Я протестировал его и решил, что элемент INPUT перестает регистрировать событие типа, как будто «bind» больше не существует на нем.

Я сделал много поисковых запросов и решил, что обычный обработчик JQuery «привязка», расположенный на элементе INPUT, ненадежный. Поэтому я решил присоединить обработчик события к объекту документа используя вместо этого следующее:

$(document).bind('keydown', function(e) { 
    // do something 
} 

Я знаю, что я могу использовать «e.target», чтобы получить целевой элемент, что действие выполняется на (и это работает me, e.target правильно относится к элементу INPUT).

Мой вопрос: как мне получить объект, который создал элемент INPUT в первую очередь? Мне нужно иметь возможность выполнять функции, содержащиеся в соответствующем классе «Вход» , который использовался для создания элемента INPUT. Мне нужно вызвать эти функции из функции «$ (document) .bind». Поэтому в основном я должен иметь возможность получить входной объект родительского/создателя элемента INPUT.

Если я не объяснил ничего достаточно ясно, просто дайте мне знать. Любая помощь в этом вопросе будет очень признательна! Я также открыт для предложений по альтернативным методам (кроме использования «$ (document) .bind»).

Спасибо!

ответ

0

Я думаю, я понимаю проблему ...

Вы можете пройти через DOM, чтобы найти элемент документа родителя, но это не то, что вы имеете в виду, не так ли? Вы хотите, чтобы элемент родительского скрипта имел кучу логики, которая работает с элементом.

Я подозреваю, что, возможно, проще всего предоставить некоторую ссылку на родителя при создании элемента ввода ... передать это обработчику события или установить его в глобально доступном месте (например, current_element_parent var) ,

+0

Большое спасибо! Прочитав ответ, я решил использовать вложенные петли for-in, чтобы пройти через мою иерархию объектов и проверить элемент документа каждого элемента ввода на переданный элемент e.target.Возможно, это не самый эффективный способ, но все работает сейчас! Еще раз спасибо! –

0

Я согласен с tobyhede. Вы можете добавить пользовательский атрибут в элемент INPUT, который ссылается на родителя, или сохранить карту в памяти, которая отображает динамически созданный элемент INPUT родительскому объекту, который его создал. Когда вы ловуте ключ Return, просто удалите связь с картой, чтобы ее можно было добавить снова, если пользователь снова нажмет на нее.

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