JQuery: Поиск объекта, создавшего элемент DOM


0

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

входного элемента создается внутри объекта 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.Возможно, это не самый эффективный способ, но все работает сейчас! Еще раз спасибо! 22 фев. 092009-02-22 06:04:01


0

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